Infinispan 客户端扩展参考指南
Infinispan 是一个分布式内存键/值存储,为 Quarkus 应用程序提供高度可配置且可独立扩展的数据层。 此扩展为您提供客户端功能,将运行在 Quarkus 上的应用程序与远程 Infinispan 集群连接起来。 要开始使用 Infinispan,我们建议
在 Infinispan 文档中了解更多信息。
安装
在 Quarkus 项目的根目录中运行以下命令以添加 infinispan-client
扩展
quarkus extension add infinispan-client
./mvnw quarkus:add-extension -Dextensions='infinispan-client'
./gradlew addExtension --extensions='infinispan-client'
此命令将以下依赖项添加到您的构建文件中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-infinispan-client</artifactId>
</dependency>
implementation 'io.quarkus:quarkus-infinispan-client'
annotationProcessor 'org.infinispan.protostream:protostream-processor:{infinispan-protostream-version}' (1)
1 | Gradle 构建中必须启用基于注解的序列化中的文件生成 |
连接到 Infinispan
运行服务器
您至少需要一个 Infinispan Server 的运行实例。
如果您正在运行 Docker 实例,则可以使用 Infinispan Dev Services 并在无需配置的情况下进行连接。
如果您想使用 Docker 自己运行服务器,请查看 5 分钟的Infinispan 入门教程以运行 Infinispan Server
您还可以下载 ${infinispan.version} Server 裸机发行版,并从发行版文件夹运行以下命令。
$ ./bin/server.sh
Infinispan Server 默认启用身份验证和安全授权,因此您需要创建一个具有权限的用户。
-
如果您运行 Infinispan Server 镜像,请传递
USER="admin"
和PASS="password"
参数。 -
如果您运行 裸机发行版,请使用命令行界面 (CLI),如下所示
$ ./bin/cli.sh user create admin -p password
在 Kubernetes 中,我们建议使用 Infinispan Operator。 此外,请查看 跨站点复制教程。 您将学习如何使用 docker compose(用于本地开发)和 Operator 运行两个单独的 Infinispan 集群。
配置连接
如果您正在运行 Infinispan Server,请添加以下属性以在 src/main/resources
目录中的 application.properties
文件中进行连接。
quarkus.infinispan-client.hosts=localhost:11222 (1)
quarkus.infinispan-client.username=admin (2)
quarkus.infinispan-client.password=password (3)
1 | 设置 Infinispan Server 地址列表,以分号分隔 |
2 | 设置身份验证用户名 |
3 | 设置身份验证密码 |
或者,您可以通过提供单个连接属性来使用 URI 连接
quarkus.infinispan-client.uri=hotrod://admin:password@localhost:11222 (1)
1 | 设置 Infinispan URI 连接。 以下属性将被忽略:hosts、username 和 password。 |
使用 Infinispan Dev Services 运行服务器并在无需配置的情况下进行连接。 |
配置跨站点复制中的备份集群
在高可用性生产部署中,通常有多个 Infinispan 集群分布在世界各地不同的数据中心。 Infinispan 提供了连接这些集群并配置它们之间备份的功能。 这使得可以使用单个连接通过自动化和手动方法在集群之间无缝切换。 要实现此目的,需要配置客户端以定向到备份集群。
quarkus.infinispan-client.hosts=host1:11222;host2:3122 (1)
quarkus.infinispan-client.username=admin
quarkus.infinispan-client.password=password
quarkus.infinispan-client.backup-cluster.nyc-site.hosts=nyc1:11222;nyc2:21222;nyc3:31222 (2)
quarkus.infinispan-client.backup-cluster.lon-site.hosts=lon1:11222;lon2:21222;lon3:31222 (3)
1 | 设置 Infinispan Server 地址列表,以分号分隔。 这是默认集群。 |
2 | 使用提供的地址列表配置备份站点“nyc-site” |
3 | 使用提供的地址列表配置其他备份站点“lon-site” |
根据提供的配置,如果默认集群不可用,客户端将无缝过渡到其中一个可访问的备份集群。 此外,还可以选择手动将客户端切换到备用集群
@ApplicationScoped
public class InfinispanExample {
@Inject
RemoteCacheManager cacheManager;
public void doSomething() {
cacheManager.switchToCluster("nyc-site"); (1)
cacheManager.switchToCluster("lon-site"); (2)
cacheManager.switchToDefaultCluster(); (3)
}
}
1 | 客户端连接到“nyc-site”。 |
2 | 客户端连接到“lon-site”。 |
3 | 客户端连接到默认站点。 |
默认情况下,Protobuf 架构也会上传到备份集群。 但是,可能需要手动处理注册,因为架构在使用过程中可能会随着时间的推移而演变,因此您可以通过将 quarkus.infinispan-client.backup-cluster.YOUR_SITE_NAME.use-schema-registration
配置为 false
来禁用每个备份站点中发生的这种情况。 如果 use-schema-registration
全局属性为 false
,则此属性的值将被忽略。
跨站点复制是 Infinispan 提供的一项强大功能,可促进位于地理位置不同的数据中心之间的集群之间的数据备份,甚至跨越各种云提供商。 在 Infinispan 文档中了解更多信息。 |
默认和命名连接
此扩展允许您配置默认 Infinispan 客户端连接和命名连接。 命名连接对于连接到多个 Infinispan 集群至关重要。
默认连接使用 quarkus.infinispan-client.*
属性进行配置,如上所示。 使用默认连接时,您可以使用普通 @Inject
进行注入
命名客户端使用 quarkus.infinispan-client.<name>.*
属性进行配置
quarkus.infinispan-client.site-lon.hosts=localhost:11222
quarkus.infinispan-client.site-lon.username=admin
quarkus.infinispan-client.site-lon.password=password
quarkus.infinispan-client.site-nyc.hosts=localhost:31222
quarkus.infinispan-client.site-nyc.username=admin
quarkus.infinispan-client.site-nyc.password=password
将 @InfinispanClientName
限定符与依赖项注入结合使用
@ApplicationScoped
public class InfinispanExample {
@Inject
@InfinispanClientName("site-lon")
RemoteCacheManager rcmLon;
@Inject
@InfinispanClientName("site-nyc")
RemoteCacheManager rmcNyc;
}
Infinispan 健康检查
如果您使用的是 quarkus-smallrye-health 扩展,则 Infinispan 客户端扩展将自动添加就绪状态健康检查以验证连接。
当您访问应用程序的 /q/health/ready
端点时,您将获得有关服务器连接和可用缓存的信息。
可以通过属性 quarkus.infinispan-client.health.enabled
禁用此行为。
使用 OpenTelemetry 进行跟踪
Infinispan 支持通过 OpenTelemetry 对服务器进行检测。 拥有 quarkus-opentelemetry
扩展会将跟踪从 Infinispan 客户端传播到服务器。 可以通过属性 quarkus.infinispan-client.tracing.propagation.enabled
禁用此行为
从客户端创建缓存
当从客户端访问缓存时,如果 Infinispan Server 中不存在该缓存,并且您希望在首次访问时创建它,请使用以下属性之一
quarkus.infinispan-client.cache.magazine.configuration=<distributed-cache><encoding media-type="application/x-protostream"/></distributed-cache> (1)
quarkus.infinispan-client.cache.books.configuration-resource=booksDistributedCache.json (2)
quarkus.infinispan-client.cache.authors.configuration-uri=/file/authorsIndexedCache.yaml (3)
1 | “magazine”的 xml 配置(也支持 yaml 和 json) |
2 | 位于 resources 文件夹下的文件名,其中包含“books”缓存的配置 |
3 | 提供的文件 URI。 文件 URI 也可以是 resources 下的文件 |
如果为同一个具有相同 Quarkus 配置文件的缓存配置了 configuration-resource
、configuration
和 configuration-uri
,则 configuration-uri
的优先级最高,高于 configuration-resource
和 configuration
。 configuration-resource
的优先级高于 configuration
。
|
可以以 XML、JSON 或 YAML 格式提供缓存配置。 使用 Infinispan 控制台和缓存配置向导来了解有关 Infinispan 缓存的更多信息并创建引导式配置。 |
如果未为特定缓存配置任何内容,则将使用以下基本配置创建它
<distributed-cache>
<encoding media-type="application/x-protostream"/>
</distributed-cache>
{
"distributed-cache": {
"encoding": {
"media-type": "application/x-protostream"
}
}
}
distributedCache:
encoding:
mediaType: "application/x-protostream"
身份验证机制
您可以将以下身份验证机制与 Infinispan 客户端结合使用
-
DIGEST-SHA-512(默认)
-
DIGEST-MD5
-
PLAIN(建议仅与 TLS 加密结合使用)
-
EXTERNAL
其他身份验证机制(例如 SCRAM 和 GSSAPI)尚未通过 Infinispan 客户端验证。
您可以在 Hot Rod 端点身份验证机制中找到有关配置身份验证的更多信息。
如果您使用依赖项注入,则必须在 hotrod-client.properties 文件中配置身份验证。 |
序列化(键值类型支持)
默认情况下,客户端将支持以下类型的键和值:byte[]、原始包装器(例如 Integer、Long、Double)、String、Date 和 Instant。 用户类型需要一些此处详细说明的额外步骤。 假设我们有以下用户类
public record Author(String name, String surname) {
}
public record Book(String title,
String description,
int publicationYear,
Set<Author> authors,
Type bookType,
BigDecimal price) {
}
用户类型的序列化使用基于 protobuf 的库,称为 Protostream。
Infinispan 缓存可以存储不同编码的键和值,但建议使用协议缓冲区 (Protobuf)。 有关更多信息,请参阅我们的缓存编码和编组指南。 |
基于注解的序列化
这可以通过将 protostream 注解添加到您的用户类来自动完成。 此外,还需要一个带注解的 Initializer 接口,用于控制支持类的生成方式。
以下是应该如何更改先前类的示例
@Proto (1)
public record Author(String name, String surname) { (2)
}
1 | 自 Protostream 5.0 起,需要单个注解来生成默认映射 |
2 | 自 Protostream 5.0 起,支持记录 |
@Proto
public enum Type { (1)
FANTASY,
PROGRAMMING
}
1 | 支持枚举 |
@Proto
@Indexed (1)
public record Book(@Text String title, (2)
@Keyword(projectable = true, sortable = true, normalizer = "lowercase", indexNullAs = "unnamed", norms = false) (3)
String description,
int publicationYear,
Set<Author> authors, (4)
Type bookType,
BigDecimal price) { (5)
}
1 | 指示实体将被索引。 执行分布式全文查询操作所必需。 |
2 | 指示应将 title 索引为文本 |
3 | 指示 description 字段应索引为关键字。 |
4 | 支持集合 |
5 | Protostream 为常用类型(如 BigDecimal )提供默认的 Protobuf 映射器,这些类型包含在 org.infinispan.protostream.types 包中。 |
然后,所需的只是一个非常简单的 GeneratedSchema
接口,该接口上有一个注解来指定配置设置
import org.infinispan.protostream.GeneratedSchema;
import org.infinispan.protostream.annotations.ProtoSchema;
import org.infinispan.protostream.types.java.math.BigDecimalAdapter;
@ProtoSchema(includeClasses = { Book.class, Author.class, BigDecimalAdapter.class }, schemaPackageName = "book_sample")
interface BookStoreSchema extends GeneratedSchema {
}
您可以使用 |
因此,在这种情况下,我们将自动为包含的类生成编组器和架构,并将它们自动放置在架构包中。 不需要提供包,但是如果您使用 Infinispan 搜索功能,则必须知道生成的包。
在 Quarkus 中,不应在 ProtoSchema 注解上设置 schemaFileName 和 schemaFilePath 属性。 设置任何属性都会导致本地运行时错误。 |
自定义序列化
当用户可以注解他们的类时,建议使用前面的方法。 遗憾的是,用户可能无法注解他们将放入缓存的所有类。 在这种情况下,您必须定义您的架构并自己创建 Marshaller。
- Protobuf 架构
-
您可以通过以下两种方式之一提供 protobuf 架构。
-
Proto 文件
您可以将.proto
文件放在项目的META-INF
目录中。 这些文件将在初始化时自动被拾取。library.protopackage book_sample; message Book { required string title = 1; required string description = 2; required int32 publicationYear = 3; // no native Date type available in Protobuf repeated Author authors = 4; requited double price = 5; // no native BigDecimal type available in Protobuf but you can use the adapter } message Author { required string name = 1; required string surname = 2; }
-
在代码中
或者,您可以通过定义org.infinispan.protostream.schema.Schema
类型的生成 bean,直接在用户代码中定义 proto 架构。@Produces Schema bookSchema() { return new Schema.Builder("book.proto") .packageName("book_sample") .addMessage("Author") .addField(Type.Scalar.STRING, "name", 1) .addField(Type.Scalar.STRING, "surname", 2) .addMessage("Book") .addField(Type.Scalar.STRING, "title", 1) .addField(Type.Scalar.STRING, "description", 2) .addField(Type.Scalar.INT32, "publicationYear", 3) .addRepeatedField(Type.create("Author"), "author", 4) .addField(Type.Scalar.DOUBLE, "price", 5) .build(); }
-
- 用户 Marshaller
-
最后要做的是为 proto 架构中定义的每个用户类提供一个
org.infinispan.protostream.MessageMarshaller
实现。 然后通过@Produces
以与上面的基于代码的 proto 架构定义类似的方式提供该类。以下是我们 Author & Book 类的 Marshaller 类。
类型名称必须完全匹配 <protobuf package>.<protobuf message>
!AuthorMarshaller.javapublic class AuthorMarshaller implements MessageMarshaller<Author> { @Override public String getTypeName() { return "book_sample.Author"; } @Override public Class<? extends Author> getJavaClass() { return Author.class; } @Override public void writeTo(ProtoStreamWriter writer, Author author) throws IOException { writer.writeString("name", author.getName()); writer.writeString("surname", author.getSurname()); } @Override public Author readFrom(ProtoStreamReader reader) throws IOException { String name = reader.readString("name"); String surname = reader.readString("surname"); return new Author(name, surname); } }
BookMarshaller.javapublic class BookMarshaller implements MessageMarshaller<Book> { @Override public String getTypeName() { return "book_sample.Book"; } @Override public Class<? extends Book> getJavaClass() { return Book.class; } @Override public void writeTo(ProtoStreamWriter writer, Book book) throws IOException { writer.writeString("title", book.getTitle()); writer.writeString("description", book.getDescription()); writer.writeInt("publicationYear", book.getPublicationYear()); writer.writeCollection("authors", book.getAuthors(), Author.class); writer.writeDouble("price", book.getPrice().doubleValue()); } @Override public Book readFrom(ProtoStreamReader reader) throws IOException { String title = reader.readString("title"); String description = reader.readString("description"); int publicationYear = reader.readInt("publicationYear"); Set<Author> authors = reader.readCollection("authors", new HashSet<>(), Author.class); BigDecimal price = BigDecimal.valueOf(reader.readDouble("price")); return new Book(title, description, publicationYear, authors, price); } }
您可以通过定义以下内容来传递 marshaller
@Produces MessageMarshaller authorMarshaller() { return new AuthorMarshaller(); } @Produces MessageMarshaller bookMarshaller() { return new BookMarshaller(); }
上述生成的 Marshaller 方法必须返回没有类型的 MessageMarshaller
,否则将找不到它。
依赖项注入
正如您在上面看到的,我们支持用户注入 Marshaller 配置。 您可以使用 Infinispan 客户端扩展进行反向操作,为 RemoteCacheManager
和 RemoteCache
对象提供注入。 有一个全局 RemoteCacheManager
采用上述部分中设置的所有配置参数。
注入这些组件非常简单。 您需要做的只是将 @Inject
注解添加到字段、构造函数或方法。 在下面的代码中,我们利用字段和构造函数注入。
@Inject
SomeClass(RemoteCacheManager remoteCacheManager) {
this.remoteCacheManager = remoteCacheManager;
}
@Inject
@Remote("myCache")
RemoteCache<String, Book> cache;
RemoteCacheManager remoteCacheManager;
如果您注意到 RemoteCache
声明有一个名为 Remote
的附加注解。 这是一个 限定符注解,允许您指定将注入哪个命名缓存。 此注解不是必需的,如果未提供该注解,则将注入默认缓存。 RemoteCacheManager 和 RemoteCache bean 范围为 @ApplicationScoped
。
对于非默认连接,将限定符 @InfinispanClientName
和 @Remote
组合在一起。
@Inject
@InfinispanClientName("lon-site")
@Remote("books")
RemoteCache<String, Book> lonBooks;
@Inject
@InfinispanClientName("nyc-site")
@Remote("books")
RemoteCache<String, Book> nycBooks;
可能支持其他类型的注入,请参阅其他部分以获取更多信息 |
模拟支持
Quarkus 支持使用两种不同的方法来使用模拟对象。 您可以使用 CDI 替代项来模拟所有测试类的 bean,也可以使用 QuarkusMock
来模拟每个测试的 bean。 查看测试入门指南以获取更多信息。
可以模拟 RemoteCacheManager 和 RemoteCache。
@ApplicationScoped
public class BookService {
@Inject
@Remote("books")
RemoteCache<String, Book> books; (1)
public String getBookDescriptionById(String id) {
Book book = books.get(id);
if (book == null) {
return "default";
}
return book.getDescription();
}
}
1 | 使用依赖项注入连接到 books 缓存 |
在测试类中,可以模拟 RemoteCache。
@QuarkusTest
public class BookServiceTest {
@Inject
BookService bookService;
@InjectMock (1)
@Remote("books")
RemoteCache<String, Book> bookRemoteCache;
@Test
public void mockRemoteCache() {
Mockito.when(bookRemoteCache.get("harry_potter")).thenReturn(new Book(... "Best saga ever");(2)
Assertions.assertThat(bookService.getBookDescriptionById("harry_potter")).isEqualTo("Best saga ever");(3)
}
}
1 | 注入一个模拟而不是 RemoteCache bean |
2 | 使用 Mockito 模拟 RemoteCache 的调用 |
3 | 断言服务调用 |
向 Infinispan Server 注册 Protobuf 架构
您需要向 Infinispan Server 注册生成的 Protobuf 架构,以执行查询或从 Protobuf
转换为其他媒体类型,例如 JSON
。
您可以通过登录到 查看 Infinispan Dev Services 指南以连接到 Infinispan Dev Services 服务器。 |
默认情况下,以此方式生成的 Protobuf 架构将在客户端首次连接时由此扩展注册。 但是,可能需要手动处理注册,因为架构在使用过程中可能会随着时间的推移而演变,因此您可以通过将 quarkus.infinispan-client.use-schema-registration
配置为 false
来禁用这种情况。
要手动配置架构,请使用 Kubernetes 部署的 Infinispan Operator、Infinispan 控制台、REST API 或 Hot Rod Java Client。
使用注解进行缓存
Infinispan 缓存注解在此扩展中已弃用,将被删除。 使用或替换您的注解,方法是使用 Infinispan 缓存扩展。 更新您的导入语句以使用来自 |
Infinispan Client 扩展提供了一组注解,这些注解可以在 CDI 管理的 bean 中使用,以启用 Infinispan 的缓存功能。
缓存注解不允许在私有方法上使用。 它们可以与任何其他访问修饰符(包括包私有(没有显式修饰符))一起正常工作。 |
@CacheResult
尽可能从缓存中加载方法结果,而不执行方法体。
当调用使用 @CacheResult
注解的方法时,Quarkus 将使用方法参数作为缓存键,并检查缓存中是否已调用该方法。 不允许使用具有多个参数的方法。 对于复合键,请定义一个 Protobuf 架构,该架构将保存多个值。 如果在缓存中找到值,则返回该值,并且永远不会实际执行带注解的方法。 如果未找到值,则调用带注解的方法,并将返回的值存储在缓存中使用计算出的键。 此注解不能用于返回 void
的方法。
与 Quarkus-Cache 扩展不同,Infinispan Client 扩展还无法缓存 null 值。 |
查询
只要配置了上面的 ProtoStreamMarshaller
,Infinispan 客户端就支持索引和非索引搜索。 这允许用户基于 proto 架构的属性查询 键 或 值。 出于性能原因,建议使用索引查询。
<distributed-cache name="books" statistics="true">
<!-- other configuration -->
<indexing enabled="true" storage="filesystem" startup-mode="PURGE">
<indexed-entities>
<indexed-entity>book_sample.Book</indexed-entity>
</indexed-entities>
</indexing>
</distributed-cache>
{
"books": {
"distributed-cache": {
...
"indexing": {
"enabled": true,
"storage": "filesystem",
"startupMode": "PURGE",
"indexed-entities": [
"book_sample.Book"
]
}
}
}
}
distributedCache:
# other configuration
indexing:
enabled: "true"
storage: "filesystem"
startupMode: "PURGE"
indexedEntities:
- "book_sample.Book"
查询构建在设置 ProtoStreamMarshaller
时可以配置的 proto 定义之上。 上面的任何一种序列化方法都会在启动时自动向服务器注册架构,这意味着您将自动获得查询存储在远程 Infinispan Server 中的对象的能力。
@Indexed (1)
public class Book {
@ProtoFactory
public Book(String title, String description, int publicationYear, Set<Author> authors) {
...
}
@ProtoField(number = 1)
@Text (2)
public String getTitle() {
return title;
}
@ProtoField(number = 2)
@Keyword(projectable = true, sortable = true, normalizer = "lowercase", indexNullAs = "unnamed", norms = false) (3)
public String getDescription() {
return description;
}
...
1 | @Indexed 注解使 POJO 可索引 |
2 | @Basic 注解用于没有任何特殊转换的索引字段 |
3 | @Keyword 注解用于将规范化器应用于文本字段 |
您可以将 Query DSL 或 Ickle 查询语言与 Quarkus Infinispan 客户端扩展一起使用。
@Inject
@Remote("books")
RemoteCache<String, Book> booksCache; (1)
Query<Book> query = booksCache.query("from book_sample.Book b where b.authors.name like '%" + name + "%'"); (2)
List<Book> list = query.execute().list();
1 | 注入 books 缓存 |
2 | 对书籍作者姓名执行全文查询 |
您可以在 Infinispan 文档中阅读有关查询的更多信息。 |
在 Quarkus 3.9 和 Infinispan 15 集成之前,通过调用以下代码来执行查询:.Query.java
此代码将不再起作用,因为
|
计数器
Infinispan 也有计数器的概念,Quarkus Infinispan 客户端开箱即用支持它们。
Quarkus Infinispan 客户端扩展允许直接进行 CounterManager
的依赖项注入。 您需要做的只是注解您的字段、构造函数或方法,您就可以轻松获得它。 然后,您可以像往常一样使用计数器。
@Inject
CounterManager counterManager;
您可以在 Infinispan 文档中阅读有关集群计数器的更多信息。
近缓存
默认情况下禁用近缓存,但您可以通过配置以下属性在每个缓存基本启用它
quarkus.infinispan-client.cache.books.near-cache-mode=INVALIDATED (1)
quarkus.infinispan-client.cache.books.near-cache-max-entries=200 (2)
quarkus.infinispan-client.cache.books.near-cache-use-bloom-filter=true (3)
1 | 通过将模式设置为 INVALIDATED 来为“books”缓存启用近缓存 |
2 | 设置“books”缓存的近缓存在发生驱逐之前可以容纳的最大条目数 |
3 | 为“books”缓存启用布隆过滤器 |
加密
此时加密需要额外的步骤才能正常工作。
第一步是将 application.properties
文件配置为指向您的信任库和/或密钥库。 此处此处对此进行了更详细的说明。
默认情况下,Infinispan Client 扩展启用 SSL/TLS。 您可以在 将 SSL 与本机可执行文件一起使用中阅读有关此内容的更多信息。
SSL 主机名验证
为了防止 MITM 攻击,启用 SSL 时,默认情况下在 Infinispan 中启用 SSL 主机名验证。 在这种情况下,必须配置 SNI 主机名才能启动客户端。
quarkus.infinispan-client.sni-host-name=localhost (1)
1 | 设置 SNI 主机名 |
可以通过禁用验证来更改此行为。
quarkus.infinispan-client.ssl-host-name-validation=false (1)
1 | 禁用 ssl 主机名验证 |
Infinispan 的 Dev Services
当您在开发模式或测试模式下使用 infinispan-client 扩展时,Quarkus 会自动启动 Infinispan 服务器并配置您的应用程序。
启用/禁用 Infinispan 的 Dev Services
在 Infinispan Dev Services 指南中了解更多信息。 |
共享服务器
如果您在开发模式下运行多个应用程序,Quarkus 将共享 Infinispan 代理。 Infinispan 的 Dev Services 为您在 开发 模式下运行的多个 Quarkus 应用程序实现了一个服务发现机制,以共享一个代理。
Infinispan 的 Dev Services 使用 quarkus-dev-service-infinispan 标签启动容器,该标签用于标识容器。 |
如果您需要多个(共享的)Infinispan 服务器,您可以配置 quarkus.infinispan-client.devservices.service-name
属性并指示服务器名称。 它查找具有相同值的容器,如果找不到任何容器,则启动一个新容器。 默认服务名称为 infinispan
。
默认情况下,在开发模式下启用共享,但在测试模式下禁用共享。 您可以使用 quarkus.infinispan-client.devservices.shared=false
禁用共享。
设置端口
默认情况下,Infinispan 的 Dev Services 选择一个随机端口并配置应用程序。 您可以通过配置 quarkus.infinispan-client.devservices.port
属性来设置端口。
配置参考
构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖
配置属性 |
类型 |
默认 |
---|---|---|
设置 marshallerClass。 默认为 ProtoStreamMarshaller 环境变量: 显示更多 |
字符串 |
|
如果存在 smallrye-health 扩展,是否发布健康检查。 这是一个全局设置,不特定于 Infinispan Client。 环境变量: 显示更多 |
布尔值 |
|
设置要连接的正在运行的 Infinispan 服务器的 URI。 hotrod://:11222@admin:password 如果提供 环境变量: 显示更多 |
字符串 |
|
设置要连接的主机名/端口。 每一个都以分号分隔(例如 host1:11222;host2:11222)。 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的客户端智能 可用值:* 环境变量: 显示更多 |
字符串 |
|
启用或禁用身份验证。 在连接到没有身份验证的 Infinispan Server 时,将其设置为 false。 部署。 默认为“true”。 环境变量: 显示更多 |
布尔值 |
|
字符串 |
||
字符串 |
||
字符串 |
|
|
设置身份验证使用的服务器名称 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的 SASL 机制。 可用值:* 环境变量: 显示更多 |
字符串 |
|
指定用于创建 环境变量: 显示更多 |
字符串 |
|
指定打开密钥库所需的密码。 您还需要指定密钥库。 设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
指定密钥库的类型,例如 PKCS12。 环境变量: 显示更多 |
字符串 |
|
设置用于标识密钥库中特定密钥对以进行安全连接的唯一名称。 环境变量: 显示更多 |
字符串 |
|
指定用于创建 环境变量: 显示更多 |
字符串 |
|
指定打开信任存储所需的密码。还需要指定 trustStore。设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
指定信任存储的类型,例如 JKS 或 JCEKS。如果启用了 trustStore,则默认为 JKS。 环境变量: 显示更多 |
字符串 |
|
配置安全套接字协议。设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
设置 SSL 提供程序。例如 BCFIPS。设置此项会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
配置密码。设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串列表 |
|
执行 SSL 主机名验证。默认为 true。 环境变量: 显示更多 |
布尔值 |
|
SNI 主机名。启用 SSL 且主机名验证为 true 时,此项为必需项。 环境变量: 显示更多 |
字符串 |
|
配置套接字超时。 环境变量: 显示更多 |
整数 |
|
如果存在 Opentelemetry 扩展,是否启用跟踪传播。默认情况下,上下文的传播是从客户端传播到 Infinispan 服务器。 环境变量: 显示更多 |
布尔值 |
|
启用或禁用 Protobuf 生成的模式上传到服务器。当您需要在服务器端处理 Protobuf 模式的生命周期时,请将其设置为“false”。默认为“true”。这是一个全局设置,不特定于 Infinispan 客户端。 环境变量: 显示更多 |
布尔值 |
|
启动客户端并连接到服务器。如果设置为 false,您需要自行启动它。 环境变量: 显示更多 |
布尔值 |
|
以 XML、JSON 或 YAML 格式缓存配置文件在构建时定义,以便在首次访问时创建缓存。用户定义属性的示例。cacheConfig.xml 文件位于“resources”文件夹中:quarkus.infinispan-client.cache.bookscache.configuration-resource=cacheConfig.xml 环境变量: 显示更多 |
字符串 |
|
以嵌入式 XML 格式缓存配置,以便在首次访问时创建缓存。如果为同一缓存名称提供了 configuration-uri,则将被忽略。用户定义属性的示例:quarkus.infinispan-client.cache.bookscache.configuration= 环境变量: 显示更多 |
字符串 |
|
以 XML、Json 或 YAML 格式缓存配置文件,其路径将转换为 URI 以在首次访问时创建缓存。用户定义属性的示例。cacheConfig.xml 文件位于“resources”文件夹中:quarkus.infinispan-client.cache.bookscache.configuration-uri=cacheConfig.xml 环境变量: 显示更多 |
字符串 |
|
为指定的缓存本地保留的最大条目数。 环境变量: 显示更多 |
整数 |
|
设置 Infinispan 客户端使用的近缓存模式。可用值: * 环境变量: 显示更多 |
|
|
为近缓存启用 Bloom 过滤器。Bloom 过滤器通过减少失效消息的总数来优化写入操作的性能。 环境变量: 显示更多 |
布尔值 |
|
设置要连接的主机名/端口。每个主机名/端口都用分号分隔(例如 hostA:11222;hostB:11222)。 环境变量: 显示更多 |
字符串 |
必需 |
设置身份验证使用的客户端智能 可用值:* 环境变量: 显示更多 |
字符串 |
|
启用或禁用 Protobuf 生成的模式上传到备份。当您需要在服务器端处理 Protobuf 模式的生命周期时,请将其设置为“false”。默认为“true”。如果全局设置设置为 false,则此设置将被忽略。 环境变量: 显示更多 |
布尔值 |
|
类型 |
默认 |
|
设置 marshallerClass。 默认为 ProtoStreamMarshaller 环境变量: 显示更多 |
字符串 |
|
以 XML、JSON 或 YAML 格式缓存配置文件在构建时定义,以便在首次访问时创建缓存。用户定义属性的示例。cacheConfig.xml 文件位于“resources”文件夹中:quarkus.infinispan-client.cache.bookscache.configuration-resource=cacheConfig.xml 环境变量: 显示更多 |
字符串 |
|
设置要连接的正在运行的 Infinispan 服务器的 URI。 hotrod://:11222@admin:password 如果提供 环境变量: 显示更多 |
字符串 |
|
设置要连接的主机名/端口。 每一个都以分号分隔(例如 host1:11222;host2:11222)。 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的客户端智能 可用值:* 环境变量: 显示更多 |
字符串 |
|
启用或禁用身份验证。 在连接到没有身份验证的 Infinispan Server 时,将其设置为 false。 部署。 默认为“true”。 环境变量: 显示更多 |
布尔值 |
|
设置身份验证使用的用户名。 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的密码。 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的域 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的服务器名称 环境变量: 显示更多 |
字符串 |
|
设置身份验证使用的 SASL 机制。 可用值:* 环境变量: 显示更多 |
字符串 |
|
指定用于创建 环境变量: 显示更多 |
字符串 |
|
指定打开密钥库所需的密码。 您还需要指定密钥库。 设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
指定密钥库的类型,例如 PKCS12。 环境变量: 显示更多 |
字符串 |
|
设置用于标识密钥库中特定密钥对以进行安全连接的唯一名称。 环境变量: 显示更多 |
字符串 |
|
指定用于创建 环境变量: 显示更多 |
字符串 |
|
指定打开信任存储所需的密码。还需要指定 trustStore。设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
指定信任存储的类型,例如 JKS 或 JCEKS。如果启用了 trustStore,则默认为 JKS。 环境变量: 显示更多 |
字符串 |
|
配置安全套接字协议。设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
设置 SSL 提供程序。例如 BCFIPS。设置此项会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串 |
|
配置密码。设置此属性会隐式启用 SSL/TLS。 环境变量: 显示更多 |
字符串列表 |
|
执行 SSL 主机名验证。默认为 true。 环境变量: 显示更多 |
布尔值 |
|
SNI 主机名。启用 SSL 且主机名验证为 true 时,此项为必需项。 环境变量: 显示更多 |
字符串 |
|
配置套接字超时。 环境变量: 显示更多 |
整数 |
|
如果存在 Opentelemetry 扩展,是否启用跟踪传播。默认情况下,上下文的传播是从客户端传播到 Infinispan 服务器。 环境变量: 显示更多 |
布尔值 |
|
以嵌入式 XML 格式缓存配置,以便在首次访问时创建缓存。如果为同一缓存名称提供了 configuration-uri,则将被忽略。用户定义属性的示例:quarkus.infinispan-client.cache.bookscache.configuration= 环境变量: 显示更多 |
字符串 |
|
以 XML、Json 或 YAML 格式缓存配置文件,其路径将转换为 URI 以在首次访问时创建缓存。用户定义属性的示例。cacheConfig.xml 文件位于“resources”文件夹中:quarkus.infinispan-client.cache.bookscache.configuration-uri=cacheConfig.xml 环境变量: 显示更多 |
字符串 |
|
为指定的缓存本地保留的最大条目数。 环境变量: 显示更多 |
整数 |
|
设置 Infinispan 客户端使用的近缓存模式。可用值: * 环境变量: 显示更多 |
|
|
为近缓存启用 Bloom 过滤器。Bloom 过滤器通过减少失效消息的总数来优化写入操作的性能。 环境变量: 显示更多 |
布尔值 |
|
设置要连接的主机名/端口。每个主机名/端口都用分号分隔(例如 hostA:11222;hostB:11222)。 环境变量: 显示更多 |
字符串 |
必需 |
设置身份验证使用的客户端智能 可用值:* 环境变量: 显示更多 |
字符串 |
|
启用或禁用 Protobuf 生成的模式上传到备份。当您需要在服务器端处理 Protobuf 模式的生命周期时,请将其设置为“false”。默认为“true”。如果全局设置设置为 false,则此设置将被忽略。 环境变量: 显示更多 |
布尔值 |
|
类型 |
默认 |
|
开发服务是否已被显式启用或禁用。通常默认启用开发服务,除非存在现有配置。 当启用开发服务时,Quarkus 将尝试在开发或测试模式下运行并且 Docker 正在运行时自动配置和启动数据库。 环境变量: 显示更多 |
布尔值 |
|
当配置为空时,将自动创建一个 Infinispan 默认客户端以连接到正在运行的开发服务。但是,在某些情况下,创建此客户端是不必要的,但我们仍然需要启动 Infinispan 服务器。在这种情况下,此属性用于确定是否应默认由扩展创建客户端。 环境变量: 显示更多 |
布尔值 |
|
开发服务将侦听的可选固定端口。 如果未定义,将随机选择端口。 环境变量: 显示更多 |
整数 |
|
指示 Quarkus 开发服务管理的 Infinispan 服务器是否共享。共享时,Quarkus 使用基于标签的服务发现来查找正在运行的容器。如果找到匹配的容器,则使用它,因此不会启动第二个容器。否则,Infinispan 的开发服务将启动一个新容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
附加到启动的容器的 当您需要多个共享 Infinispan 服务器时,将使用此属性。 环境变量: 显示更多 |
字符串 |
|
要使用的镜像。请注意,仅支持官方 Infinispan 镜像。 环境变量: 显示更多 |
字符串 |
|
要自动下载并添加到 Infinispan 服务器库的项目列表。 例如 Maven 坐标 (org.postgresql:postgresql:42.3.1) 或依赖项位置 URL。 如果传递了无效值,则 Infinispan 服务器在尝试启动时将抛出错误。 环境变量: 显示更多 |
字符串列表 |
|
添加站点名称以启动启用了跨站点复制的 Infinispan 服务器容器(例如 lon)。跨站点复制是可以连接可能在不同数据中心运行的两个单独的 Infinispan 服务器集群,并配置备份缓存以使用主动-主动或主动-被动复制跨集群复制数据的功能。有关跨站点复制的更多信息,请参见 Infinispan 文档 https://infinispan.org/docs/stable/titles/xsite/xsite.html 配置 环境变量: 显示更多 |
字符串 |
|
如果您已经在 Docker 中运行 Infinispan 服务器,如果容器使用相同的 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 服务器配置块。 环境变量: 显示更多 |
字符串列表 |
|
类型 |
默认 |
|
开发服务是否已被显式启用或禁用。通常默认启用开发服务,除非存在现有配置。 当启用开发服务时,Quarkus 将尝试在开发或测试模式下运行并且 Docker 正在运行时自动配置和启动数据库。 环境变量: 显示更多 |
布尔值 |
|
当配置为空时,将自动创建一个 Infinispan 默认客户端以连接到正在运行的开发服务。但是,在某些情况下,创建此客户端是不必要的,但我们仍然需要启动 Infinispan 服务器。在这种情况下,此属性用于确定是否应默认由扩展创建客户端。 环境变量: 显示更多 |
布尔值 |
|
开发服务将侦听的可选固定端口。 如果未定义,将随机选择端口。 环境变量: 显示更多 |
整数 |
|
指示 Quarkus 开发服务管理的 Infinispan 服务器是否共享。共享时,Quarkus 使用基于标签的服务发现来查找正在运行的容器。如果找到匹配的容器,则使用它,因此不会启动第二个容器。否则,Infinispan 的开发服务将启动一个新容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
附加到启动的容器的 当您需要多个共享 Infinispan 服务器时,将使用此属性。 环境变量: 显示更多 |
字符串 |
|
要使用的镜像。请注意,仅支持官方 Infinispan 镜像。 环境变量: 显示更多 |
字符串 |
|
要自动下载并添加到 Infinispan 服务器库的项目列表。 例如 Maven 坐标 (org.postgresql:postgresql:42.3.1) 或依赖项位置 URL。 如果传递了无效值,则 Infinispan 服务器在尝试启动时将抛出错误。 环境变量: 显示更多 |
字符串列表 |
|
添加站点名称以启动启用了跨站点复制的 Infinispan 服务器容器(例如 lon)。跨站点复制是可以连接可能在不同数据中心运行的两个单独的 Infinispan 服务器集群,并配置备份缓存以使用主动-主动或主动-被动复制跨集群复制数据的功能。有关跨站点复制的更多信息,请参见 Infinispan 文档 https://infinispan.org/docs/stable/titles/xsite/xsite.html 配置 环境变量: 显示更多 |
字符串 |
|
如果您已经在 Docker 中运行 Infinispan 服务器,如果容器使用相同的 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 服务器配置块。 环境变量: 显示更多 |
字符串列表 |