此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 spring-cloud-stream 4.1.4! |
RabbitMQ Binder 参考指南
本指南介绍了 Spring Cloud Stream Binder 的 RabbitMQ 实现。 它包含有关其设计、使用和配置选项的信息,以及有关 Stream Cloud Stream 概念如何映射到 RabbitMQ 特定构造的信息。
用法
要使用 RabbitMQ Binders,可以使用以下 Maven 坐标将其添加到 Spring Cloud Stream 应用程序中:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
或者,您可以使用 Spring Cloud Stream RabbitMQ Starter,如下所示:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
RabbitMQ Binder 概述
以下简化图显示了 RabbitMQ Binder 的运行方式:
默认情况下,RabbitMQ Binder 实现将每个目标映射到TopicExchange
.
对于每个使用者组,一个Queue
绑定到TopicExchange
.
每个 Consumer 实例都有对应的 RabbitMQConsumer
instance 为其组的Queue
.
对于分区的创建者和使用者,队列以分区索引为后缀,并使用分区索引作为路由键。
对于匿名使用者(没有group
属性),则使用自动删除队列(具有随机的唯一名称)。
通过使用可选的autoBindDlq
选项中,您可以配置 Binder 以创建和配置死信队列 (DLQ)(和死信交换DLX
以及路由基础结构)。
默认情况下,死信队列具有目标的名称,并附加.dlq
.
如果启用了重试 (maxAttempts > 1
),失败的消息将在重试用尽后传送到 DLQ。
如果禁用重试 (maxAttempts = 1
),您应该设置requeueRejected
自false
(默认值),以便将失败的消息路由到 DLQ,而不是重新排队。
另外republishToDlq
使 Binder 将失败的消息发布到 DLQ(而不是拒绝它)。
此功能允许其他信息(例如x-exception-stacktrace
header) 添加到 Headers 中的消息中。
请参阅frameMaxHeadroom
财产了解有关截断堆栈跟踪的信息。
此选项不需要启用 retry。
您只需尝试一次即可重新发布失败的消息。
从版本 1.2 开始,您可以配置重新发布的消息的传递模式。
请参阅republishDeliveryMode
财产.
如果流侦听器抛出ImmediateAcknowledgeAmqpException
,则绕过 DLQ,并简单地丢弃消息。
从版本 2.1 开始,无论republishToDlq
;以前,只有当republishToDlq
是false
.
设置requeueRejected 自true (使用republishToDlq=false ) 导致消息重新排队并不断重新传送,这可能不是您想要的,除非失败的原因是暂时的。
通常,您应该通过在 Binder 中设置maxAttempts 设置为大于 1 或通过设置republishToDlq 自true . |
从版本 3.1.2 开始,如果使用者被标记为transacted
,发布到 DLQ 将参与事务。
这允许事务在发布因某种原因失败时回滚(例如,如果用户无权发布到死信交换)。
此外,如果连接工厂配置为发布者确认或返回,则发布到 DLQ 将等待确认并检查返回的消息。
如果收到否定确认或返回的消息,Binder 将抛出一个AmqpRejectAndDontRequeueException
,允许代理负责发布到 DLQ,就像republishToDlq
property 为false
.
有关这些属性的更多信息,请参阅 RabbitMQ Binder 属性。
该框架不提供任何标准机制来使用死信消息(或将它们重新路由回主队列)。 死信队列处理中介绍了一些选项。
当在 Spring Cloud Stream 应用程序中使用多个 RabbitMQ 绑定器时,禁用“RabbitAutoConfiguration”以避免相同的配置非常重要RabbitAutoConfiguration 应用于两个活页夹。
您可以使用@SpringBootApplication 注解。 |
从版本 2.0 开始,RabbitMessageChannelBinder
将RabbitTemplate.userPublisherConnection
property 设置为true
这样,非事务性创建者就可以避免使用者上出现死锁,如果缓存的连接由于代理上的内存警报而被阻止,则可能会发生这种情况。
目前,multiplex Consumer(单个使用者侦听多个队列)仅支持消息驱动的使用者;轮询的使用者只能从单个队列中检索消息。 |
配置选项
本节包含特定于 RabbitMQ Binder 和绑定通道的设置。
有关常规绑定配置选项和属性,请参阅 Spring Cloud Stream 核心文档。