Reactive Messaging RabbitMQ 连接器参考文档
本指南是 RabbitMQ 入门 的配套文档。它更详细地解释了用于响应式消息传递的 RabbitMQ 连接器的配置和使用。
本文档不涵盖连接器的所有细节。有关更多详细信息,请参阅 SmallRye 响应式消息传递网站。 |
RabbitMQ 连接器允许 Quarkus 应用程序使用 AMQP 0.9.1 协议发送和接收消息。有关该协议的更多详细信息,请参见 AMQP 0.9.1 规范。
RabbitMQ 连接器支持 AMQP 0-9-1,它与 AMQP 1.0 连接器使用的 AMQP 1.0 协议有很大不同。 您可以将 AMQP 1.0 连接器与 RabbitMQ 一起使用,如 AMQP 1.0 连接器参考中所述,尽管功能会减少。 |
此技术被认为是预览版。 在预览版中,不保证向后兼容性和在生态系统中的存在。具体改进可能需要更改配置或 API,并且成为稳定版的计划正在进行中。欢迎通过我们的 邮件列表或在我们的 GitHub 问题跟踪器中提供反馈。 有关可能的完整状态列表,请查看我们的常见问题解答条目。 |
RabbitMQ 连接器扩展
要使用连接器,您需要添加 quarkus-messaging-rabbitmq
扩展。
您可以使用以下方式将扩展添加到您的项目中
> ./mvnw quarkus:add-extensions -Dextensions="quarkus-messaging-rabbitmq"
或者直接将以下依赖项添加到您的项目中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-messaging-rabbitmq</artifactId>
</dependency>
添加到您的项目后,您可以通过配置 connector
属性将通道映射到 RabbitMQ 交换机或队列。
# Inbound
mp.messaging.incoming.[channel-name].connector=smallrye-rabbitmq
# Outbound
mp.messaging.outgoing.[channel-name].connector=smallrye-rabbitmq
outgoing
通道映射到 RabbitMQ 交换机,incoming
通道映射到 RabbitMQ 队列,这是代理所要求的。
配置 RabbitMQ 代理访问
RabbitMQ 连接器连接到 RabbitMQ 代理。要配置代理的位置和凭据,请在 application.properties
中添加以下属性
rabbitmq-host=amqp (1)
rabbitmq-port=5672 (2)
rabbitmq-username=my-username (3)
rabbitmq-password=my-password (4)
mp.messaging.incoming.prices.connector=smallrye-rabbitmq (5)
1 | 配置代理主机名。您可以按通道进行配置(使用 host 属性)或全局配置(使用 rabbitmq-host )。 |
2 | 配置代理端口。您可以按通道进行配置(使用 port 属性)或全局配置(使用 rabbitmq-port )。默认值为 5672 。 |
3 | 如果需要,配置代理用户名。您可以按通道进行配置(使用 username 属性)或全局配置(使用 rabbitmq-username )。 |
4 | 如果需要,配置代理密码。您可以按通道进行配置(使用 password 属性)或全局配置(使用 rabbitmq-password )。 |
5 | 指示 prices 通道由 RabbitMQ 连接器管理 |
在开发模式和运行测试时,RabbitMQ 的开发服务会自动启动 RabbitMQ 代理。
接收 RabbitMQ 消息
假设您的应用程序接收 Message<Double>
。您可以直接消费有效负载
package inbound;
import org.eclipse.microprofile.reactive.messaging.Incoming;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class RabbitMQPriceConsumer {
@Incoming("prices")
public void consume(double price) {
// process your price.
}
}
或者,您可以检索 Message<Double>
package inbound;
import org.eclipse.microprofile.reactive.messaging.Incoming;
import org.eclipse.microprofile.reactive.messaging.Message;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.concurrent.CompletionStage;
@ApplicationScoped
public class RabbitMQPriceMessageConsumer {
@Incoming("prices")
public CompletionStage<Void> consume(Message<Double> price) {
// process your price.
// Acknowledge the incoming message, marking the RabbitMQ message as `accepted`.
return price.ack();
}
}
入站元数据
来自 RabbitMQ 的消息在元数据中包含 IncomingRabbitMQMetadata
的实例。
Optional<IncomingRabbitMQMetadata> metadata = incoming.getMetadata(IncomingRabbitMQMetadata.class);
metadata.ifPresent(meta -> {
final Optional<String> contentEncoding = meta.getContentEncoding();
final Optional<String> contentType = meta.getContentType();
final Optional<String> correlationId = meta.getCorrelationId();
final Optional<ZonedDateTime> creationTime = meta.getCreationTime(ZoneId.systemDefault());
final Optional<Integer> priority = meta.getPriority();
final Optional<String> replyTo = meta.getReplyTo();
final Optional<String> userId = meta.getUserId();
// Access a single String-valued header
final Optional<String> stringHeader = meta.getHeader("my-header", String.class);
// Access all headers
final Map<String,Object> headers = meta.getHeaders();
// ...
});
反序列化
连接器将传入的 RabbitMQ 消息转换为响应式消息传递 Message<T>
实例。有效负载类型 T
取决于 RabbitMQ 收到的消息信封 content_type
和 content_encoding
属性的值。
content_encoding | content_type | T |
---|---|---|
存在值 |
不适用 |
|
没有值 |
|
|
没有值 |
|
一个 JSON 元素,它可以是 |
没有值 |
任何其他值 |
|
如果您使用此 RabbitMQ 连接器(出站连接器)发送对象,它们将被编码为 JSON 并以 content_type
设置为 application/json
发送。您可以使用(Vert.x)JSON 对象接收此有效负载,然后将其映射到您想要的对象类。
@ApplicationScoped
public static class Generator {
@Outgoing("to-rabbitmq")
public Multi<Price> prices() { (1)
AtomicInteger count = new AtomicInteger();
return Multi.createFrom().ticks().every(Duration.ofMillis(1000))
.map(l -> new Price().setPrice(count.incrementAndGet()))
.onOverflow().drop();
}
}
@ApplicationScoped
public static class Consumer {
List<Price> prices = new CopyOnWriteArrayList<>();
@Incoming("from-rabbitmq")
public void consume(JsonObject p) { (2)
Price price = p.mapTo(Price.class); (3)
prices.add(price);
}
public List<Price> list() {
return prices;
}
}
1 | Price 实例由连接器自动编码为 JSON |
2 | 您可以使用 JsonObject 接收它 |
3 | 然后,您可以使用 mapTo 方法重建实例 |
mapTo 方法使用 Quarkus Jackson 映射器。请查看 本指南以了解有关映射器配置的更多信息。 |
发送 RabbitMQ 消息
序列化
发送 Message<T>
时,连接器会将消息转换为 RabbitMQ 消息。有效负载转换为 RabbitMQ 消息体。
T | RabbitMQ 消息体 |
---|---|
基本类型或 |
|
|
|
|
二进制内容, |
|
二进制内容, |
任何其他类 |
有效负载转换为 JSON(使用 Json 映射器),然后序列化, |
如果消息有效负载无法序列化为 JSON,则消息会被否定。
出站元数据
发送 Messages
时,您可以添加 OutgoingRabbitMQMetadata
的实例以影响 RabbitMQ 处理消息的方式。例如,您可以配置路由键、时间戳和标头
final OutgoingRabbitMQMetadata metadata = new OutgoingRabbitMQMetadata.Builder()
.withHeader("my-header", "xyzzy")
.withRoutingKey("urgent")
.withTimestamp(ZonedDateTime.now())
.build();
// Add `metadata` to the metadata of the outgoing message.
return Message.of("Hello", Metadata.of(metadata));
配置 RabbitMQ 交换机/队列
您可以使用通道配置上的属性配置与通道关联的 RabbitMQ 交换机或队列。 incoming
通道映射到 RabbitMQ queues
,outgoing
通道映射到 RabbitMQ
交换机。 例如
mp.messaging.incoming.prices.connector=smallrye-rabbitmq
mp.messaging.incoming.prices.queue.name=my-queue
mp.messaging.outgoing.orders.connector=smallrye-rabbitmq
mp.messaging.outgoing.orders.exchange.name=my-order-queue
如果未设置 exchange.name
或 queue.name
属性,则连接器使用通道名称。
要使用现有队列,您需要配置 name
并将交换机或队列的 declare
属性设置为 false
。 例如,如果您有一个配置了 people
交换机和队列的 RabbitMQ 代理,则需要以下配置
mp.messaging.incoming.people.connector=smallrye-rabbitmq
mp.messaging.incoming.people.queue.name=people
mp.messaging.incoming.people.queue.declare=false
mp.messaging.outgoing.people.connector=smallrye-rabbitmq
mp.messaging.outgoing.people.exchange.name=people
mp.messaging.outgoing.people.exchange.declare=false
执行模型和阻塞处理
响应式消息传递在 I/O 线程上调用您的方法。 有关此主题的更多详细信息,请参阅 Quarkus 响应式架构文档。 但是,您通常需要将响应式消息传递与阻塞处理(例如数据库交互)相结合。 为此,您需要使用 @Blocking
注释,表明该处理是阻塞的,不应在调用者线程上运行。
例如,以下代码说明了如何使用带有 Panache 的 Hibernate 将传入的有效负载存储到数据库中
import io.smallrye.reactive.messaging.annotations.Blocking;
import org.eclipse.microprofile.reactive.messaging.Incoming;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.transaction.Transactional;
@ApplicationScoped
public class PriceStorage {
@Incoming("prices")
@Blocking
@Transactional
public void store(int priceInUsd) {
Price price = new Price();
price.value = priceInUsd;
price.persist();
}
}
有 2 个
它们具有相同的效果。 因此,您可以同时使用两者。 第一个提供了更细粒度的调整,例如要使用的工作线程池以及它是否保留顺序。 第二个也与 Quarkus 的其他响应式功能一起使用,它使用默认工作线程池并保留顺序。 |
@RunOnVirtualThread
有关在 Java 虚拟线程上运行阻塞处理的信息,请参见 Quarkus 虚拟线程支持与响应式消息传递文档。 |
自定义底层 RabbitMQ 客户端
连接器在底层使用 Vert.x RabbitMQ 客户端。 有关此客户端的更多详细信息,请参见 Vert.x 网站。
您可以通过生成 RabbitMQOptions
的实例来自定义底层客户端配置,如下所示
@Produces
@Identifier("my-named-options")
public RabbitMQOptions getNamedOptions() {
PemKeyCertOptions keycert = new PemKeyCertOptions()
.addCertPath("./tls/tls.crt")
.addKeyPath("./tls/tls.key");
PemTrustOptions trust = new PemTrustOptions().addCertPath("./tlc/ca.crt");
// You can use the produced options to configure the TLS connection
return new RabbitMQOptions()
.setSsl(true)
.setPemKeyCertOptions(keycert)
.setPemTrustOptions(trust)
.setUser("user1")
.setPassword("password1")
.setHost("localhost")
.setPort(5672)
.setVirtualHost("vhost1")
.setConnectionTimeout(6000) // in milliseconds
.setRequestedHeartbeat(60) // in seconds
.setHandshakeTimeout(6000) // in milliseconds
.setRequestedChannelMax(5)
.setNetworkRecoveryInterval(500) // in milliseconds
.setAutomaticRecoveryEnabled(true);
}
检索此实例并用于配置连接器使用的客户端。 您需要使用 client-options-name
属性指示客户端的名称
mp.messaging.incoming.prices.client-options-name=my-named-options
TLS 配置
RabbitMQ 消息传递扩展与 Quarkus TLS 注册表集成以配置 Vert.x RabbitMQ 客户端。
要配置通道的 TLS,您需要在 application.properties
中提供一个命名的 TLS 配置
quarkus.tls.your-tls-config.trust-store.pem.certs=ca.crt,ca2.pem
# ...
mp.messaging.incoming.prices.tls-configuration-name=your-tls-config
健康报告
如果您将 RabbitMQ 连接器与 quarkus-smallrye-health
扩展一起使用,它将有助于就绪性和活跃性探测。 RabbitMQ 连接器报告由连接器管理的每个通道的就绪性和活跃性。
要禁用健康报告,请将通道的 health-enabled
属性设置为 false。
在入站端(从 RabbitMQ 接收消息),检查验证接收者是否已连接到代理。
在出站端(向 RabbitMQ 发送记录),检查验证发送者是否已与代理断开连接;发送者可能仍处于初始化状态(尚未尝试连接),但这被认为是活跃/就绪状态。
请注意,消息处理失败会否定消息,然后由 failure-strategy
处理。 报告故障并影响检查结果是 failure-strategy
的责任。 fail
故障策略报告故障,因此检查将报告故障。
动态凭据
Quarkus 和 RabbitMQ 连接器支持 Vault 的 RabbitMQ 密钥引擎,用于生成短期的动态凭据。 这允许 Vault 定期创建和撤销 RabbitMQ 凭据。
首先,我们需要启用 Vault 的 rabbitmq
密钥引擎,使用 RabbitMQ 的连接和身份验证信息对其进行配置,并创建一个 Vault 角色 my-role
(将 10.0.0.3
替换为运行 RabbitMQ 容器的实际主机)。
vault secrets enable rabbitmq
vault write rabbitmq/config/connection \
connection_uri=http://10.0.0.3:15672 \
username=guest \
password=guest
vault write rabbitmq/roles/my-role \
vhosts='{"/":{"write": ".*", "read": ".*"}}'
对于此用例,上面配置的用户 |
然后,我们需要向 Quarkus 应用程序授予对路径 rabbitmq/creds/my-role
的读取权限。
cat <<EOF | vault policy write vault-rabbitmq-policy -
path "secret/data/myapps/vault-rabbitmq-test/*" {
capabilities = ["read"]
}
path "rabbitmq/creds/my-role" {
capabilities = [ "read" ]
}
EOF
现在 Vault 知道如何在 RabbitMQ 中创建用户,我们需要配置 Quarkus 以使用 RabbitMQ 的凭据提供程序。
首先,我们告诉 Quarkus 使用名为 rabbitmq
的凭据提供程序来请求动态凭据。
quarkus.rabbitmq.credentials-provider = rabbitmq
接下来,我们配置 rabbitmq
凭据提供程序。 credentials-role
选项必须设置为我们在 Vault 中创建的角色名称,在我们的例子中为 my-role
。 credentials-mount
选项必须设置为 rabbitmq
。
quarkus.vault.credentials-provider.rabbitmq.credentials-role=my-role
quarkus.vault.credentials-provider.rabbitmq.credentials-mount=rabbitmq
credentials-mount 直接用作 Vault 中密钥引擎的挂载点。 这里我们使用 rabbitmq 的默认挂载路径。 如果 RabbitMQ 密钥引擎挂载在自定义路径上,则必须将 credentials-mount 选项设置为该路径。 |
RabbitMQ 连接器配置参考
入站通道配置
属性 (别名) | 描述 | 强制 | 默认 |
---|---|---|---|
username (rabbitmq-username) |
用于向代理进行身份验证的用户名 类型:字符串 |
false |
|
密码 (rabbitmq-password) |
用于向代理进行身份验证的密码 类型:字符串 |
false |
|
主机 (rabbitmq-host) |
代理主机名 类型:字符串 |
false |
|
端口 (rabbitmq-port) |
代理端口 类型:整数 |
false |
|
ssl (rabbitmq-ssl) |
连接是否应使用 SSL 类型:布尔值 |
false |
|
trust-all (rabbitmq-trust-all) |
是否跳过信任证书验证 类型:布尔值 |
false |
|
trust-store-path (rabbitmq-trust-store-path) |
JKS 信任存储的路径 类型:字符串 |
false |
|
trust-store-password (rabbitmq-trust-store-password) |
JKS 信任存储的密码 类型:字符串 |
false |
|
credentials-provider-name (rabbitmq-credentials-provider-name) |
用于向 RabbitMQ 客户端提供动态凭据的 RabbitMQ 凭据提供程序 bean 的名称 类型:字符串 |
false |
|
connection-timeout |
TCP 连接超时(毫秒); 0 被解释为没有超时 类型:整数 |
false |
|
handshake-timeout |
AMQP 0-9-1 协议握手超时(毫秒) 类型:整数 |
false |
|
automatic-recovery-enabled |
是否启用自动连接恢复 类型:布尔值 |
false |
|
automatic-recovery-on-initial-connection |
是否启用初始连接时的自动恢复 类型:布尔值 |
false |
|
reconnect-attempts (rabbitmq-reconnect-attempts) |
重试连接的次数 类型:整数 |
false |
|
reconnect-interval (rabbitmq-reconnect-interval) |
两次重新连接尝试之间的间隔(以秒为单位) 类型:整数 |
false |
|
network-recovery-interval |
自动恢复在尝试重新连接之前将等待多长时间(毫秒) 类型:整数 |
false |
|
user |
连接到代理时要使用的 AMQP 用户名 类型:字符串 |
false |
|
include-properties |
当代理消息传递到事件总线时是否包含属性 类型:布尔值 |
false |
|
requested-channel-max |
最初请求的最大通道数 类型:整数 |
false |
|
requested-heartbeat |
最初请求的心跳间隔(秒),零表示无 类型:整数 |
false |
|
use-nio |
是否启用 NIO 套接字的使用 类型:布尔值 |
false |
|
virtual-host (rabbitmq-virtual-host) |
连接到代理时要使用的虚拟主机 类型:字符串 |
false |
|
exchange.name |
消息发布到或从中消费的交换机。 如果未设置,则使用通道名称。 如果设置为 类型:字符串 |
false |
|
exchange.durable |
交换机是否持久 类型:布尔值 |
false |
|
exchange.auto-delete |
是否应在使用后删除交换机 类型:布尔值 |
false |
|
exchange.type |
交换机类型:direct、fanout、headers 或 topic(默认) 类型:字符串 |
false |
|
exchange.declare |
是否声明交换机;如果希望独立设置交换机,则设置为 false 类型:布尔值 |
false |
|
tracing.enabled |
是否启用(默认)或禁用跟踪 类型:布尔值 |
false |
|
tracing.attribute-headers |
一个逗号分隔的标头列表,应记录为 span 属性。 仅当 tracing.enabled=true 时才相关 类型:字符串 |
false |
`` |
queue.name |
从中消费消息的队列。 类型:字符串 |
true |
|
queue.durable |
队列是否持久 类型:布尔值 |
false |
|
queue.exclusive |
队列是否用于独占使用 类型:布尔值 |
false |
|
queue.auto-delete |
是否应在使用后删除队列 类型:布尔值 |
false |
|
queue.declare |
是否声明队列和绑定;如果希望独立设置这些,则设置为 false 类型:布尔值 |
false |
|
queue.ttl |
如果指定,则消息在队列中未传递之前可以保持处于死信状态的时间(毫秒) 类型:长整型 |
false |
|
queue.single-active-consumer |
如果设置为 true,则只有一个消费者可以主动消费消息 类型:布尔值 |
false |
|
queue.x-queue-type |
如果自动声明队列,我们可以选择不同类型的队列 [quorum, classic, stream] 类型:字符串 |
false |
|
queue.x-queue-mode |
如果自动声明队列,我们可以选择不同的队列模式 [lazy, default] 类型:字符串 |
false |
|
max-incoming-internal-queue-size |
传入内部队列的最大大小 类型:整数 |
false |
|
connection-count |
为从该队列消费而创建的 RabbitMQ 连接数。 这可能需要从具有单个分片客户端的分片队列中消费。 类型:整数 |
false |
|
auto-bind-dlq |
是否自动声明 DLQ 并将其绑定到绑定器 DLX 类型:布尔值 |
false |
|
dead-letter-queue-name |
DLQ 的名称;如果未提供,则默认为队列名称附加 '.dlq' 类型:字符串 |
false |
|
dead-letter-exchange |
要分配给队列的 DLX。 仅当 auto-bind-dlq 为 true 时才相关 类型:字符串 |
false |
|
dead-letter-exchange-type |
要分配给队列的 DLX 类型。 仅当 auto-bind-dlq 为 true 时才相关 类型:字符串 |
false |
|
dead-letter-routing-key |
要分配给队列的死信路由键;如果未提供,则默认为队列名称 类型:字符串 |
false |
|
dlx.declare |
是否声明死信交换机绑定。 仅当 auto-bind-dlq 为 true 时才相关; 如果希望独立设置这些,则设置为 false 类型:布尔值 |
false |
|
dead-letter-queue-type |
如果自动声明 DLQ,我们可以选择不同类型的 DLQ [quorum, classic, stream] 类型:字符串 |
false |
|
dead-letter-queue-mode |
如果自动声明 DLQ,我们可以选择不同的 DLQ 模式 [lazy, default] 类型:字符串 |
false |
|
失败策略 |
否定 RabbitMQ 消息时要应用的失败策略。 可接受的值为 类型:字符串 |
false |
|
广播 |
是否必须将收到的 RabbitMQ 消息分派给多个订阅者 类型:布尔值 |
false |
|
auto-acknowledgement |
收到 RabbitMQ 消息时是否必须确认; 如果为 true,则传递构成确认 类型:布尔值 |
false |
|
keep-most-recent |
是否放弃旧消息而不是最新消息 类型:布尔值 |
false |
|
routing-keys |
将队列绑定到交换机的逗号分隔的路由键列表 类型:字符串 |
false |
|
content-type-override |
覆盖传入消息的 content_type 属性,应该是有效的 MIME 类型 类型:字符串 |
false |
|
max-outstanding-messages |
连接器一次处理的最大未完成/未确认消息数; 必须是正数 类型:整数 |
false |
出站通道配置
属性 (别名) | 描述 | 强制 | 默认 |
---|---|---|---|
automatic-recovery-enabled |
是否启用自动连接恢复 类型:布尔值 |
false |
|
automatic-recovery-on-initial-connection |
是否启用初始连接时的自动恢复 类型:布尔值 |
false |
|
connection-timeout |
TCP 连接超时(毫秒); 0 被解释为没有超时 类型:整数 |
false |
|
default-routing-key |
将消息发送到交换机时要使用的默认路由键 类型:字符串 |
false |
`` |
default-ttl |
如果指定,则发送的消息在队列中未传递之前可以保持处于死信状态的时间(毫秒) 类型:长整型 |
false |
|
exchange.auto-delete |
是否应在使用后删除交换机 类型:布尔值 |
false |
|
exchange.declare |
是否声明交换机;如果希望独立设置交换机,则设置为 false 类型:布尔值 |
false |
|
exchange.durable |
交换机是否持久 类型:布尔值 |
false |
|
exchange.name |
消息发布到或从中消费的交换机。 如果未设置,则使用通道名称。 如果设置为 类型:字符串 |
false |
|
exchange.type |
交换机类型:direct、fanout、headers 或 topic(默认) 类型:字符串 |
false |
|
handshake-timeout |
AMQP 0-9-1 协议握手超时(毫秒) 类型:整数 |
false |
|
主机 (rabbitmq-host) |
代理主机名 类型:字符串 |
false |
|
include-properties |
当代理消息传递到事件总线时是否包含属性 类型:布尔值 |
false |
|
max-inflight-messages |
要并发写入 RabbitMQ 的最大消息数; 必须是正数 类型:长整型 |
false |
|
max-outgoing-internal-queue-size |
传出内部队列的最大大小 类型:整数 |
false |
|
network-recovery-interval |
自动恢复在尝试重新连接之前将等待多长时间(毫秒) 类型:整数 |
false |
|
密码 (rabbitmq-password) |
用于向代理进行身份验证的密码 类型:字符串 |
false |
|
端口 (rabbitmq-port) |
代理端口 类型:整数 |
false |
|
reconnect-attempts (rabbitmq-reconnect-attempts) |
重试连接的次数 类型:整数 |
false |
|
reconnect-interval (rabbitmq-reconnect-interval) |
两次重新连接尝试之间的间隔(以秒为单位) 类型:整数 |
false |
|
requested-channel-max |
最初请求的最大通道数 类型:整数 |
false |
|
requested-heartbeat |
最初请求的心跳间隔(秒),零表示无 类型:整数 |
false |
|
ssl (rabbitmq-ssl) |
连接是否应使用 SSL 类型:布尔值 |
false |
|
tracing.attribute-headers |
一个逗号分隔的标头列表,应记录为 span 属性。 仅当 tracing.enabled=true 时才相关 类型:字符串 |
false |
`` |
tracing.enabled |
是否启用(默认)或禁用跟踪 类型:布尔值 |
false |
|
trust-all (rabbitmq-trust-all) |
是否跳过信任证书验证 类型:布尔值 |
false |
|
trust-store-password (rabbitmq-trust-store-password) |
JKS 信任存储的密码 类型:字符串 |
false |
|
trust-store-path (rabbitmq-trust-store-path) |
JKS 信任存储的路径 类型:字符串 |
false |
|
credentials-provider-name (rabbitmq-credentials-provider-name) |
用于向 RabbitMQ 客户端提供动态凭据的 RabbitMQ 凭据提供程序 bean 的名称 类型:字符串 |
false |
|
use-nio |
是否启用 NIO 套接字的使用 类型:布尔值 |
false |
|
user |
连接到代理时要使用的 AMQP 用户名 类型:字符串 |
false |
|
username (rabbitmq-username) |
用于向代理进行身份验证的用户名 类型:字符串 |
false |
|
virtual-host (rabbitmq-virtual-host) |
连接到代理时要使用的虚拟主机 类型:字符串 |
false |
|