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

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 控制台:

  1. Open the Dev UI

  2. 你将看到一个 *Infinispan Client*框。点击 *Web Console*并输入上述凭证。

dev ui infinispan

如果你的环境不支持 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 DemoInfinispan Persistence Documentation 指南。

Shared server

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

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

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

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