编辑此页面

Infinispan 的 Dev Services

Quarkus 支持一项名为 Dev Services 的功能,允许您创建各种数据源而无需任何配置。如果您正在运行 Docker 并且尚未配置 quarkus.infinispan-client.hosts,Quarkus 将在运行测试或开发模式时自动启动 Infinispan 容器,并自动配置连接。

在运行应用程序的生产版本时,需要像往常一样配置 Infinispan 连接,因此如果您想在 application.properties 中包含生产数据库配置并继续使用 Dev Services,我们建议您使用 %prod. 配置文件来定义您的 Infinispan 设置。

Infinispan 的 Dev Services 依赖于 Docker/Podman 来启动服务器。

连接到正在运行的 Infinispan 服务器

您**无需在开发模式下配置任何内容**。服务器将在随机端口上运行。如果您需要固定端口,请配置 quarkus.infinispan-client.devservices.port 属性。

正在运行的 Infinispan 服务器启用了身份验证,并且有一个具有完整管理员角色的用户。用户的凭据是 admin/password

访问 Infinispan 服务器控制台

Infinispan 服务器提供了一个 Web 控制台,可以使用浏览器访问

  1. 打开 Dev UI

  2. 您将看到一个 Infinispan Client 框。单击 Web Console 并输入上面的凭据。

Dev UI Infinispan

如果您的环境不支持 Docker,您将需要手动启动 Infinispan 服务器,或连接到已在运行的服务器。

覆盖 Infinispan 服务器镜像

扩展程序会定期更新,Dev Services 将启动 Infinispan 的最新最终版本镜像。使用 quarkus.infinispan-client.devservices.image-name 属性指定另一个满足您需求的镜像。

启用/禁用 Infinispan 的 Dev Services

Infinispan 的 Dev Services 自动启用,除非

  • quarkus.infinispan-client.devservices.enabled 设置为 false

  • quarkus.infinispan-client.hosts 已配置

Infinispan 的 Dev Services 依赖于 Docker 来启动 broker。如果您的环境不支持 Docker,您将需要手动启动 broker,或连接到已在运行的 broker。您可以使用 quarkus.infinispan-client.hosts 配置 broker 地址。

为正在运行的服务器提供配置

默认情况下,Infinispan 的 Dev Services 将使用 infinispan.xml 文件启动 Infinispan。但是,在某些情况下,为服务器提供一些额外的配置会很有帮助。这可以通过将 xml、yaml 或 json 格式的配置文件添加到 resources 类路径并提供以下配置来完成

quarkus.infinispan-client.devservices.config-files=server-config-override.xml (1)
1 server-config-override.xml 是 resources 文件夹下的一个文件
<infinispan> (1)
    <cache-container>
        <local-cache name="my-local-cache"> (2)
            <encoding media-type="application/x-protostream" />
        </local-cache>
    </cache-container>
</infinispan>
1 server-config-override.xml 文件的内容
2 通过提供缓存配置,此缓存将存在于服务器容器中

跨站点复制

如果您想运行具有跨站点复制配置的 Infinispan Server 容器,则需要提供站点名称。

quarkus.infinispan-client.devservices.site=NYC (1)
quarkus.infinispan-client.devservices.mcast-port=46666 (2)
1 为您的 Infinispan 集群提供站点名称
2 如果您想避免创建与另一个容器的集群,最终配置一个 mcastPort

在 Infinispan 跨站点复制 文档指南 和 Infinispan 跨站点复制 简单代码教程 中了解有关跨站点复制的更多信息。

命名连接的多个 Dev Services

Infinispan Client 扩展支持使用命名连接连接到多个 Infinispan 集群。如果您需要为连接名称启动额外的 Dev Service,请在 application properties 中配置至少一个属性

quarkus.infinispan-client.conn-2.devservices.enabled=true

使用 OpenTelemetry 进行跟踪

Infinispan 支持使用 OpenTelemetry 进行服务器跟踪。从 Infinispan 15.0 开始,您需要在服务器设置中配置跟踪。要在 Dev Services 中启用跟踪,您需要使用 quarkus.infinispan-client.devservices.config-files 属性添加额外的设置。

infinispan:
        cacheContainer:
                tracing:
                        collector-endpoint: "http://jaeger:4318" (1)
                        enabled: true (2)
                        exporter-protocol: "OTLP" (3)
                        service-name: "infinispan-server" (4)
                        security: false (5)
1 收集器端点。假设一个容器服务名称 'jaeger' 正在运行。
2 启用跟踪。
3 导出器协议。OLTP 是 OpenTelemetry 协议。
4 将在跟踪收集器(本例中为 Jaeger)中注册的服务名称。
5 启用“安全”类别跟踪。

请参阅下面的 XML 和 JSON 等效项。

<infinispan>
  <cache-container statistics="true">
    <tracing collector-endpoint="http://jaeger:4318"
             enabled="true"
             exporter-protocol="OTLP"
             service-name="infinispan-server"
             security="false" />
  </cache-container>
</infinispan>
{
  "infinispan" : {
    "cache-container" : {
      "statistics" : true,
      "tracing" : {
        "collector-endpoint" : "http://jaeger:4318",
        "enabled" : true,
        "exporter-protocol" : "OTLP",
        "service-name" : "infinispan-server",
        "security" : false
      }
    }
  }
}

您需要命名 Jaeger 服务或运行以下命令获取 IP 以配置导出器端点。

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jaeger

Infinispan 的持久层

Infinispan 缓存提供了几个需要使用特定 SQL 数据库驱动程序连接到持久层的功能,例如将缓存持久化到 SQL 数据库中或使用 SQL 缓存存储卸载数据库表或查询。

Infinispan 需要 SQL Java Driver,具体取决于应用程序使用的数据库类型。要启动包含特定 SQL 驱动程序的容器,请配置 quarkus.infinispan-client.devservices.artifacts

要了解有关持久性和 SQL 缓存存储的更多信息,请查看 SQL Store Demo + Quarkus DemoInfinispan 持久性文档 指南。

共享服务器

大多数情况下,您需要在应用程序之间共享服务器。Infinispan 的 Dev Services 为您在开发模式下运行的多个 Quarkus 应用程序实现了一种服务发现机制,以共享单个服务器。

Infinispan 的 Dev Services 使用 infinispan 标签启动容器,该标签用于标识容器。

如果您需要多个(共享)服务器,则可以配置 quarkus.infinispan-client.devservices.service-name 属性并指示服务器名称。它查找具有相同值的容器,如果找不到,则启动一个新的容器。默认服务名称为 infinispan

默认情况下,在开发模式下启用共享,但在测试模式下禁用共享。您可以使用 quarkus.infinispan-client.devservices.shared=false 禁用共享

配置参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

开发服务是否已被显式启用或禁用。通常默认启用开发服务,除非存在现有配置。

当启用开发服务时,Quarkus 将尝试在开发或测试模式下运行并且 Docker 正在运行时自动配置和启动数据库。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_ENABLED

显示更多

布尔值

true

当配置为空时,会自动创建一个 Infinispan 默认客户端以连接到正在运行的开发服务。但是,在某些情况下,创建此客户端是不必要的,但我们仍然需要启动 Infinispan Server。在这种情况下,此属性用于确定是否应默认由扩展创建客户端。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CREATE_DEFAULT_CLIENT

显示更多

布尔值

true

开发服务将侦听的可选固定端口。

如果未定义,将随机选择端口。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_PORT

显示更多

整数

指示由 Quarkus Dev Services 管理的 Infinispan 服务器是否共享。共享时,Quarkus 使用基于标签的服务发现查找正在运行的容器。如果找到匹配的容器,则使用该容器,因此不会启动第二个容器。否则,Infinispan 的 Dev Services 将启动一个新的容器。

发现使用 quarkus-dev-service-infinispan 标签。该值使用 service-name 属性进行配置。

容器共享仅在开发模式下使用。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SHARED

显示更多

布尔值

true

附加到启动的容器的 quarkus-dev-service-infinispan 标签的值。当 shared 设置为 true 时,使用此属性。在这种情况下,在启动容器之前,Infinispan 的 Dev Services 查找 quarkus-dev-service-infinispan 标签设置为配置值的容器。如果找到,它将使用此容器而不是启动新的容器。否则,它将启动一个 quarkus-dev-service-infinispan 标签设置为指定值的新容器。

当您需要多个共享 Infinispan 服务器时,将使用此属性。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SERVICE_NAME

显示更多

字符串

infinispan

要使用的镜像。请注意,仅支持官方 Infinispan 镜像。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_IMAGE_NAME

显示更多

字符串

要自动下载并添加到 Infinispan 服务器库的项目列表。

例如 Maven 坐标 (org.postgresql:postgresql:42.3.1) 或依赖项位置 URL。

如果传递了无效值,则 Infinispan 服务器在尝试启动时将抛出错误。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_ARTIFACTS

显示更多

字符串列表

添加站点名称以启动启用跨站点复制的 Infinispan Server 容器(例如 lon)。跨站点复制是连接可能在不同数据中心运行的两个单独的 Infinispan Server 集群,并配置备份缓存以通过活动-活动或活动-被动复制在集群之间复制数据的功能。有关跨站点复制的更多信息,请参见 Infinispan 文档 https://infinispan.org/docs/stable/titles/xsite/xsite.html 配置 mcast-port 以避免与其他任何正在运行的 Infinispan Server 容器形成集群。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SITE

显示更多

字符串

如果您已经在 docker 中运行 Infinispan Server,如果容器使用相同的 mcastPort,它们将形成一个集群。设置不同的 mcastPort 以在 Docker 中创建一个单独的集群(例如 46656)。本地 Docker 开发模式中的一个常见用例是需要启用跨站点复制的两个不同的 Infinispan 集群。请参阅 https://github.com/infinispan/infinispan-simple-tutorials/blob/main/infinispan-remote/cross-site-replication/docker-compose/

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_MCAST_PORT

显示更多

整数

传递给容器的环境变量。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

显示更多

Map<String,String>

要传递给容器的 Infinispan 服务器配置块。

环境变量: QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CONFIG_FILES

显示更多

字符串列表

相关内容