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 控制台,可以使用浏览器访问
-
打开 Dev UI
-
您将看到一个 Infinispan Client 框。单击 Web Console 并输入上面的凭据。

如果您的环境不支持 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 | 通过提供缓存配置,此缓存将存在于服务器容器中 |
命名连接的多个 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 Demo 和 Infinispan 持久性文档 指南。 |
共享服务器
大多数情况下,您需要在应用程序之间共享服务器。Infinispan 的 Dev Services 为您在开发模式下运行的多个 Quarkus 应用程序实现了一种服务发现机制,以共享单个服务器。
Infinispan 的 Dev Services 使用 infinispan 标签启动容器,该标签用于标识容器。 |
如果您需要多个(共享)服务器,则可以配置 quarkus.infinispan-client.devservices.service-name
属性并指示服务器名称。它查找具有相同值的容器,如果找不到,则启动一个新的容器。默认服务名称为 infinispan
。
默认情况下,在开发模式下启用共享,但在测试模式下禁用共享。您可以使用 quarkus.infinispan-client.devservices.shared=false
禁用共享
配置参考
构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖
配置属性 |
类型 |
默认 |
---|---|---|
开发服务是否已被显式启用或禁用。通常默认启用开发服务,除非存在现有配置。 当启用开发服务时,Quarkus 将尝试在开发或测试模式下运行并且 Docker 正在运行时自动配置和启动数据库。 环境变量: 显示更多 |
布尔值 |
|
当配置为空时,会自动创建一个 Infinispan 默认客户端以连接到正在运行的开发服务。但是,在某些情况下,创建此客户端是不必要的,但我们仍然需要启动 Infinispan Server。在这种情况下,此属性用于确定是否应默认由扩展创建客户端。 环境变量: 显示更多 |
布尔值 |
|
开发服务将侦听的可选固定端口。 如果未定义,将随机选择端口。 环境变量: 显示更多 |
整数 |
|
指示由 Quarkus Dev Services 管理的 Infinispan 服务器是否共享。共享时,Quarkus 使用基于标签的服务发现查找正在运行的容器。如果找到匹配的容器,则使用该容器,因此不会启动第二个容器。否则,Infinispan 的 Dev Services 将启动一个新的容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
附加到启动的容器的 当您需要多个共享 Infinispan 服务器时,将使用此属性。 环境变量: 显示更多 |
字符串 |
|
要使用的镜像。请注意,仅支持官方 Infinispan 镜像。 环境变量: 显示更多 |
字符串 |
|
要自动下载并添加到 Infinispan 服务器库的项目列表。 例如 Maven 坐标 (org.postgresql:postgresql:42.3.1) 或依赖项位置 URL。 如果传递了无效值,则 Infinispan 服务器在尝试启动时将抛出错误。 环境变量: 显示更多 |
字符串列表 |
|
添加站点名称以启动启用跨站点复制的 Infinispan Server 容器(例如 lon)。跨站点复制是连接可能在不同数据中心运行的两个单独的 Infinispan Server 集群,并配置备份缓存以通过活动-活动或活动-被动复制在集群之间复制数据的功能。有关跨站点复制的更多信息,请参见 Infinispan 文档 https://infinispan.org/docs/stable/titles/xsite/xsite.html 配置 环境变量: 显示更多 |
字符串 |
|
如果您已经在 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/ 环境变量: 显示更多 |
整数 |
|
传递给容器的环境变量。 环境变量: 显示更多 |
Map<String,String> |
|
要传递给容器的 Infinispan 服务器配置块。 环境变量: 显示更多 |
字符串列表 |