Dev Services for Infinispan
Quarkus 支持一个名为开发服务的功能,它允许你在没有任何配置的情况下创建各种数据源。如果你正在运行 docker 且没有配置 quarkus.infinispan-client.hosts
,那么在运行测试或开发模式时,Quarkus 将自动启动一个 Infinispan 容器,并自动配置连接。
以下属性可用于定制 Infinispan 开发服务:
Unresolved include directive in modules/ROOT/pages/infinispan-dev-services.adoc - include::../../../target/quarkus-generated-doc/config/quarkus-infinispan-client_quarkus.infinispan-client.devservices.adoc[]
在运行应用程序的生产版本时,Infinispan 连接需要正常配置,所以如果你想在 `application.properties`中包含一个生产数据库配置并继续使用开发服务,我们建议你使用 `%prod.`配置概况来定义你的 Infinispan 设置。
Infinispan 的开发服务依赖于 Docker 来启动服务器。
- Connecting to the running Infinispan Server
- Overriding the Infinispan Server Image
- Enabling / Disabling Dev Services for Infinispan
- Providing configuration to the running server
- Cross Site Replication
- Multiple Dev Services for named connections
- Tracing with OpenTelemetry
- Persistence layer for Infinispan
- Shared server
Connecting to the running Infinispan Server
你 don’t need to configure anything in dev mode.服务器将在一个随机端口运行。如果你需要一个固定端口,那就配置 `quarkus.infinispan-client.devservices.port`属性。
运行的 Infinispan 服务器启用了身份验证,并拥有完全管理员角色的一个用户。该用户的凭证为 admin/password。 |
Accessing to the Infinispan Server Console
Infinispan 服务器提供了一个可以用浏览器访问的 Web 控制台:
-
Open the Dev UI
-
你将看到一个 *Infinispan Client*框。点击 *Web Console*并输入上述凭证。
如果你的环境不支持 Docker,你将需要手动启动一个 Infinispan 服务器,或连接到一个正在运行的服务器。
Overriding the Infinispan Server Image
该扩展定期更新,并且开发服务将启动 Infinispan 的最新最终版本映像。使用 `quarkus.infinispan-client.devservices.image-name`属性来指定另一个适合你需要的图像。
Enabling / Disabling Dev Services for Infinispan
除非满足以下条件,否则 Infinispan 的开发服务将自动启用:
-
quarkus.infinispan-client.devservices.enabled`设置为`false
-
the
quarkus.infinispan-client.hosts
is configured
Dev Services for Infinispan 依赖于 Docker 来启动代理。如果您的环境不支持 Docker,您将需要手动启动代理,或连接到已经运行的代理。您可以使用 `quarkus.infinispan-client.hosts`来配置代理地址。
Providing configuration to the running server
Dev Services for Infinispan 将默认启动带 infinispan.xml 文件的 Infinispan。但是,在某些情况下,向服务器提供一些额外的配置会有帮助。这可以通过在资源类路径中添加 xml、yaml 或 json 配置文件并提供以下配置来完成:
quarkus.infinispan-client.devservices.config-files=server-config-override.xml 1
1 | server-config-override.xml 是资源文件夹下的一个文件 |
<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 | 通过提供一个缓存配置,此缓存将出现在服务器容器上 |
Cross Site Replication
如果您想使用跨站点复制配置运行 Infinispan 服务器容器,您需要提供一个站点名称。
quarkus.infinispan-client.devservices.site=NYC 1
quarkus.infinispan-client.devservices.mcast-port=46666 2
1 | 为您的 Infinispan 集群提供一个站点名称 |
2 | 最终,如果您想避免与另一个容器创建一个集群,则配置一个 mcastPort |
在 Infinispan 跨站点复制 documentation guide和 Infinispan 跨站点复制 simple code tutorial中了解有关跨站点复制的更多信息。 |
Multiple Dev Services for named connections
Infinispan 客户端扩展支持使用命名连接连接到多个 Infinispan 集群。如果您需要为连接名称增加一个 dev 服务,请至少在应用程序属性中配置一个属性:
quarkus.infinispan-client.conn-2.devservices.enabled=true
Tracing with 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 | Enables tracing. |
3 | 出口协议。OLTP 是 OpenTelemetry 协议。 |
4 | 将在跟踪收集器中注册的服务名称,在本例中为 Jaeger。 |
5 | Enables 'security' category tracing. |
请参阅以下 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
Persistence layer for Infinispan
Infinispan 缓存提供了一些功能,需要使用特定 SQL 数据库驱动程序连接到持久层,例如将缓存持久保存到 SQL 数据库或使用 SQL 缓存存储卸载数据库表或查询。
Infinispan 需要 SQL Java 驱动程序,具体取决于应用程序使用的数据库类型。要启动带有特定 SQL 驱动程序的容器,请配置 quarkus.infinispan-client.devservices.artifacts
。
要了解有关持久性和 SQL 缓存存储的详细信息,请查看 SQL Store Demo + Quarkus Demo 和 Infinispan Persistence Documentation 指南。 |
Shared server
大多数情况下,您需要在应用程序之间共享服务器。Infinispan 的 Dev Services 为多个在 dev 模式下运行的 Quarkus 应用程序实现了一个 service discovery 机制,以共享一个服务器。
Infinispan 的 Dev Services 使用 |
如果您需要多个(共享)服务器,则可以配置 quarkus.infinispan-client.devservices.service-name
属性并指示服务器名称。它寻找具有相同值的新容器,如果没有找到则启动一个新容器。默认服务名称为 infinispan
。
在开发模式下默认启用共享,但在测试模式下禁用共享。您可以使用 quarkus.infinispan-client.devservices.shared=false
禁用共享。