Reactive Messaging RabbitMQ Connector Reference Documentation
本指南是 Getting Started with RabbitMQ 的配套指南。它更详细地解释了用于反应式消息传递的 RabbitMQ 连接器的配置和使用方法。
本文档并未涵盖连接器的所有详细信息。有关更多详细信息,请参阅 SmallRye Reactive Messaging website。 |
RabbitMQ 连接器允许 Quarkus 应用程序使用 AMQP 0.9.1 协议发送和接收消息。可以在 the AMQP 0.9.1 specification 中找到有关该协议的更多详细信息。
RabbitMQ 连接器支持 AMQP 0-9-1,这与 AMQP 1.0 连接器所使用的 AMQP 1.0 协议非常不同。你可以将 AMQP 1.0 连接器与 RabbitMQ 搭配使用,如 AMQP 1.0 connector reference 中所述,尽管有 reduced functionality。
该技术被认为是 {extension-status}。 有关可能状态的完整列表,请查看我们的 FAQ entry. |
RabbitMQ connector extension
要使用该连接器,你需要添加 quarkus-messaging-rabbitmq
扩展。
你可以使用以下方式将扩展添加到你的项目:
> ./mvnw quarkus:add-extensions -Dextensions="quarkus-messaging-rabbitmq"
或者只需将以下依赖项添加到你的项目中:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-messaging-rabbitmq</artifactId>
</dependency>
添加到你的项目后,你可以通过配置 connector
属性将 channels 映射到 RabbitMQ 交换或者队列:
# Inbound
mp.messaging.incoming.[channel-name].connector=smallrye-rabbitmq
# Outbound
mp.messaging.outgoing.[channel-name].connector=smallrye-rabbitmq
outgoing
通道映射到 RabbitMQ 交换,而 incoming
通道映射到 RabbitMQ 队列,因为代理需要。
Configuring the RabbitMQ Broker access
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 | 指示价格通道由 RabbitMQ 连接器管理 |
在开发模式下运行测试时,Dev Services for RabbitMQ 会自动启动一个 RabbitMQ 代理。
Receiving RabbitMQ messages
假设你的应用程序接收了 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();
}
}
Inbound Metadata
来自 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();
// ...
});
Deserialization
连接器将传入的 RabbitMQ 消息转换为 Reactive Messaging Message<T>
实例。有效负载类型 T
取决于 RabbitMQ 接收的消息包络 content_type
和 content_encoding
属性的值。
content_encoding | content_type | T |
---|---|---|
Value present |
n/a |
|
No value |
|
|
No value |
|
JSON 元素——如果缓冲区包含数组、对象、字符串等,它可以是一个 |
No value |
Anything else |
|
如果你使用此 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 方法重建该实例 |
|
Sending RabbitMQ messages
Serialization
在发送 Message<T>
时,连接器将此消息转换为 RabbitMQ 消息。有效负载转换为 RabbitMQ 消息正文。
T | RabbitMQ Message Body |
---|---|
primitive types or |
将 |
将 |
|
|
二进制内容,将 |
|
二进制内容,将 |
Any other class |
使用 |
如果无法将消息有效内容序列化为 JSON,则中断消息 nacked。
Outbound Metadata
在发送 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));
Configuring the RabbitMQ Exchange/Queue
你可以使用通道配置上的属性来配置与通道关联的 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
Execution model and Blocking processing
响应式消息传递在 I/O 线程中调用你的方法。有关此主题的更多详细信息,请查看 Quarkus Reactive Architecture documentation。但是,你通常需要将响应式消息传递与数据库交互等阻塞式处理结合使用。为此,你需要使用 @Blocking
注解,指示处理为 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 {@s7} 上运行阻塞处理,请参阅 {@s8}。 |
Customizing the underlying RabbitMQ client
连接器在下面使用 Vert.x RabbitMQ 客户端。关于此客户端的更多详细信息,请参见 Vert.x website。
可以通过生成 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
Health reporting
如果你使用带有 quarkus-smallrye-health
扩展的 RabbitMQ 连接器,则它有助于准备和运行状况探测。RabbitMQ 连接器报告连接器管理的每个通道的准备和运行状况。
要禁用运行状况报告,请将通道的 health-enabled
属性设置为 false。
在入站(从 RabbitMQ 接收消息)侧,检查会验证接收器是否已连接到代理。
在出站(将记录发送到 RabbitMQ)侧,检查会验证发送器未断开与代理的连接;发送器 may 仍处于初始化状态(尚未尝试连接),但将其视为 live/ready。
请注意,消息处理失败会标记该消息,然后由 failure-strategy
处理。由 failure-strategy
报告失败并影响检查结果。fail
失败策略会报告失败,因此检查将报告故障。
Dynamic Credentials
Quarkus 和 RabbitMQ 连接器支持 Vault’s RabbitMQ secrets engine 以生成短期动态凭证。这允许 Vault 定期创建和取消 RabbitMQ 凭证。
首先,我们需要启用 Vault 的 rabbitmq
秘密引擎,使用 RabbitMQ 的连接和认证信息对其进行配置,并创建一个 Vault 角色 my-role
(用正在运行 RabbitMQ 容器的实际主机替换 10.0.0.3
):
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": ".*"}}'
对于此用例,上面配置的用户 |
然后,我们需要在路径 rabbitmq/creds/my-role
上为 Quarkus 应用程序提供读取功能。
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
|
RabbitMQ Connector Configuration Reference
Incoming channel configuration
Attribute (alias) | Description | Mandatory | Default |
---|---|---|---|
[role="no-hyphens"]username [role="no-hyphens"](rabbitmq-username) |
用于对代理进行身份验证的用户名类型:string |
false |
|
[role="no-hyphens"]password [role="no-hyphens"](rabbitmq-password) |
用于对代理进行身份验证的密码类型:string |
false |
|
[role="no-hyphens"]host [role="no-hyphens"](rabbitmq-host) |
The broker hostname Type: string |
false |
|
[role="no-hyphens"]port [role="no-hyphens"](rabbitmq-port) |
The broker port Type: int |
false |
|
[role="no-hyphens"]ssl [role="no-hyphens"](rabbitmq-ssl) |
连接是否应使用 SSL 类型:boolean |
false |
|
[role="no-hyphens"]trust-all [role="no-hyphens"](rabbitmq-trust-all) |
是否跳过信任证书验证 类型:boolean |
false |
|
[role="no-hyphens"]trust-store-path [role="no-hyphens"](rabbitmq-trust-store-path) |
JKS 信任库的路径 类型:string |
false |
|
[role="no-hyphens"]trust-store-password [role="no-hyphens"](rabbitmq-trust-store-password) |
JKS 信任库的密码 类型:string |
false |
|
[role="no-hyphens"]credentials-provider-name [role="no-hyphens"](rabbitmq-credentials-provider-name) |
用于向 RabbitMQ 客户端提供动态凭据的 RabbitMQ 凭据提供程序 Bean 的名称 类型:string |
false |
|
[role="no-hyphens"]connection-timeout |
TCP 连接超时(毫秒);0 解释为无超时类型:int |
false |
|
[role="no-hyphens"]handshake-timeout |
AMQP 0-9-1 协议握手超时(毫秒)类型:int |
false |
|
[role="no-hyphens"]automatic-recovery-enabled |
是否启用自动连接恢复类型:boolean |
false |
|
[role="no-hyphens"]automatic-recovery-on-initial-connection |
是否启用初始连接上的自动恢复类型:boolean |
false |
|
[role="no-hyphens"]reconnect-attempts [role="no-hyphens"](rabbitmq-reconnect-attempts) |
重新连接尝试的次数类型:int |
false |
|
[role="no-hyphens"]reconnect-interval [role="no-hyphens"](rabbitmq-reconnect-interval) |
两次重连尝试之间的间隔(秒)类型:int |
false |
|
[role="no-hyphens"]network-recovery-interval |
在尝试重新连接之前,自动恢复将等待多长时间(毫秒)类型:int |
false |
|
[role="no-hyphens"]user |
连接代理时使用的 AMQP 用户名类型:string |
false |
|
[role="no-hyphens"]include-properties |
在事件总线上传递代理消息时是否包含属性类型:boolean |
false |
|
[role="no-hyphens"]requested-channel-max |
最初请求的最大通道号类型:int |
false |
|
[role="no-hyphens"]requested-heartbeat |
最初请求的心跳间隔(秒),无则为零类型:int |
false |
|
[role="no-hyphens"]use-nio |
是否启用了 NIO 套接字的使用类型:boolean |
false |
|
[role="no-hyphens"]virtual-host [role="no-hyphens"](rabbitmq-virtual-host) |
连接到代理时要使用的虚拟主机类型:string |
false |
|
[role="no-hyphens"]exchange.name |
消息发布或消费的交换。如果没有设置,将使用通道名称。如果设置为 |
false |
|
[role="no-hyphens"]exchange.durable |
交换是否持久类型:boolean |
false |
|
[role="no-hyphens"]exchange.auto-delete |
是否在使用后删除交换类型:boolean |
false |
|
[role="no-hyphens"]exchange.type |
交换类型:direct、fanout、headers 或 topic(默认)类型:string |
false |
|
[role="no-hyphens"]exchange.declare |
是否声明交换;如果应该独立设置交换,则设置为 false 类型:boolean |
false |
|
[role="no-hyphens"]tracing.enabled |
启用(默认)或禁用跟踪类型: boolean |
false |
|
[role="no-hyphens"]tracing.attribute-headers |
应记录为 span 属性的标头(用逗号分隔)。仅在 tracing.enabled=true 时相关类型:string |
false |
`` |
[role="no-hyphens"]queue.name |
使用者消费消息的队列。类型:string |
true |
|
[role="no-hyphens"]queue.durable |
队列是否持久类型:boolean |
false |
|
[role="no-hyphens"]queue.exclusive |
队列是否供独享使用类型:boolean |
false |
|
[role="no-hyphens"]queue.auto-delete |
是否在使用后删除队列类型:boolean |
false |
|
[role="no-hyphens"]queue.declare |
是否声明队列和绑定;如果应该独立设置这些队列和绑定,则设置为 false 类型:boolean |
false |
|
[role="no-hyphens"]queue.ttl |
如果已指定,则消息在队列中停留的时间(毫秒数)在转为死信之前 Type: long |
false |
|
[role="no-hyphens"]queue.single-active-consumer |
如果设置为 true,则只有一个使用者可以主动消费消息类型:boolean |
false |
|
[role="no-hyphens"]queue.x-queue-type |
如果自动声明队列,则我们可以选择不同的队列类型 [quorum、classic、stream] 类型:string |
false |
|
[role="no-hyphens"]queue.x-queue-mode |
如果自动声明队列,则我们可以选择不同的队列模式 [lazy、default] 类型:string |
false |
|
[role="no-hyphens"]max-incoming-internal-queue-size |
传入内部队列的最大大小类型:int |
false |
|
[role="no-hyphens"]connection-count |
要为此队列创建的 RabbitMQ 连接数。可能需要使用单个客户端从分片队列使用。类型:int |
false |
|
[role="no-hyphens"]auto-bind-dlq |
是否自动声明 DLQ 并将其绑定到 binder DLX 类型:boolean |
false |
|
[role="no-hyphens"]dead-letter-queue-name |
如果未提供,将默认为追加 '.dlq' 的队列名称 Type: string |
false |
|
[role="no-hyphens"]dead-letter-exchange |
分配给队列的 DLX。仅在 auto-bind-dlq 为 true 时相关 Type: string |
false |
|
[role="no-hyphens"]dead-letter-exchange-type |
分配给队列的 DLX 类型。仅在 auto-bind-dlq 为 true 时相关 Type: string |
false |
|
[role="no-hyphens"]dead-letter-routing-key |
分配给队列的死信路由键;如果未提供,将默认为队列名称 Type: string |
false |
|
[role="no-hyphens"]dlx.declare |
是否声明死信交换绑定。仅在 auto-bind-dlq 为 true 时相关;如果希望独立设置这些内容,则设置为 false Type: boolean |
false |
|
[role="no-hyphens"]dead-letter-queue-type |
如果自动声明 DLQ,我们可以选择不同类型的 DLQ [quorum、classic、stream] Type: string |
false |
|
[role="no-hyphens"]dead-letter-queue-mode |
如果自动声明 DLQ,我们可以选择不同的 DLQ 模式 [lazy、default] Type: string |
false |
|
[role="no-hyphens"]failure-strategy |
当 RabbitMQ 消息被 nacked 时应用的失败策略。可接受的值为 |
false |
|
[role="no-hyphens"]broadcast |
接收到的 RabbitMQ 消息是否必须分派至多个 subscribers Type: boolean |
false |
|
[role="no-hyphens"]auto-acknowledgement |
接收时是否必须确认接收的 RabbitMQ 消息;如果为 true,则传递构成确认 Type: boolean |
false |
|
[role="no-hyphens"]keep-most-recent |
是否丢弃旧消息而不是最新消息 Type: boolean |
false |
|
[role="no-hyphens"]routing-keys |
用逗号分隔的路由键列表,将队列绑定至交换 Type: string |
false |
|
[role="no-hyphens"]content-type-override |
覆盖传入消息的 content_type 属性,应该为一个有效的 MIME 类型Type: string |
false |
|
[role="no-hyphens"]max-outstanding-messages |
由连接器一次处理的最大未完成/未确认消息数;必须为正数 Type: int |
false |
Outgoing channel configuration
Attribute (alias) | Description | Mandatory | Default |
---|---|---|---|
[role="no-hyphens"]automatic-recovery-enabled |
是否启用自动连接恢复类型:boolean |
false |
|
[role="no-hyphens"]automatic-recovery-on-initial-connection |
是否启用初始连接上的自动恢复类型:boolean |
false |
|
[role="no-hyphens"]connection-timeout |
TCP 连接超时(毫秒);0 解释为无超时类型:int |
false |
|
[role="no-hyphens"]default-routing-key |
将消息发送至交换时使用的默认路由键 Type: string |
false |
`` |
[role="no-hyphens"]default-ttl |
如果指定,则在发送消息成为死信之前,它们可以未传递保留在队列中的时间(毫秒) Type: long |
false |
|
[role="no-hyphens"]exchange.auto-delete |
是否在使用后删除交换类型:boolean |
false |
|
[role="no-hyphens"]exchange.declare |
是否声明交换;如果应该独立设置交换,则设置为 false 类型:boolean |
false |
|
[role="no-hyphens"]exchange.durable |
交换是否持久类型:boolean |
false |
|
[role="no-hyphens"]exchange.name |
消息发布或消费的交换。如果没有设置,将使用通道名称。如果设置为 |
false |
|
[role="no-hyphens"]exchange.type |
交换类型:direct、fanout、headers 或 topic(默认)类型:string |
false |
|
[role="no-hyphens"]handshake-timeout |
AMQP 0-9-1 协议握手超时(毫秒)类型:int |
false |
|
[role="no-hyphens"]host [role="no-hyphens"](rabbitmq-host) |
The broker hostname Type: string |
false |
|
[role="no-hyphens"]include-properties |
在事件总线上传递代理消息时是否包含属性类型:boolean |
false |
|
[role="no-hyphens"]max-inflight-messages |
并发写入 RabbitMQ 的最大消息数;必须为正数 Type: long |
false |
|
[role="no-hyphens"]max-outgoing-internal-queue-size |
传出的内部队列最大大小 Type: int |
false |
|
[role="no-hyphens"]network-recovery-interval |
在尝试重新连接之前,自动恢复将等待多长时间(毫秒)类型:int |
false |
|
[role="no-hyphens"]password [role="no-hyphens"](rabbitmq-password) |
用于对代理进行身份验证的密码类型:string |
false |
|
[role="no-hyphens"]port [role="no-hyphens"](rabbitmq-port) |
The broker port Type: int |
false |
|
[role="no-hyphens"]reconnect-attempts [role="no-hyphens"](rabbitmq-reconnect-attempts) |
重新连接尝试的次数类型:int |
false |
|
[role="no-hyphens"]reconnect-interval [role="no-hyphens"](rabbitmq-reconnect-interval) |
两次重连尝试之间的间隔(秒)类型:int |
false |
|
[role="no-hyphens"]requested-channel-max |
最初请求的最大通道号类型:int |
false |
|
[role="no-hyphens"]requested-heartbeat |
最初请求的心跳间隔(秒),无则为零类型:int |
false |
|
[role="no-hyphens"]ssl [role="no-hyphens"](rabbitmq-ssl) |
连接是否应使用 SSL 类型:boolean |
false |
|
[role="no-hyphens"]tracing.attribute-headers |
应记录为 span 属性的标头(用逗号分隔)。仅在 tracing.enabled=true 时相关类型:string |
false |
`` |
[role="no-hyphens"]tracing.enabled |
启用(默认)或禁用跟踪类型: boolean |
false |
|
[role="no-hyphens"]trust-all [role="no-hyphens"](rabbitmq-trust-all) |
是否跳过信任证书验证 类型:boolean |
false |
|
[role="no-hyphens"]trust-store-password [role="no-hyphens"](rabbitmq-trust-store-password) |
JKS 信任库的密码 类型:string |
false |
|
[role="no-hyphens"]trust-store-path [role="no-hyphens"](rabbitmq-trust-store-path) |
JKS 信任库的路径 类型:string |
false |
|
[role="no-hyphens"]credentials-provider-name [role="no-hyphens"](rabbitmq-credentials-provider-name) |
用于向 RabbitMQ 客户端提供动态凭据的 RabbitMQ 凭据提供程序 Bean 的名称 类型:string |
false |
|
[role="no-hyphens"]use-nio |
是否启用了 NIO 套接字的使用类型:boolean |
false |
|
[role="no-hyphens"]user |
连接代理时使用的 AMQP 用户名类型:string |
false |
|
[role="no-hyphens"]username [role="no-hyphens"](rabbitmq-username) |
用于对代理进行身份验证的用户名类型:string |
false |
|
[role="no-hyphens"]virtual-host [role="no-hyphens"](rabbitmq-virtual-host) |
连接到代理时要使用的虚拟主机类型:string |
false |
|