|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 spring-cloud-stream 5.0.0! |
RabbitMQ Binder 参考指南
本指南介绍了RabbitMQ实现的Spring Cloud Stream Binder。 其中包含其设计、使用和配置选项的信息,以及 Stream Cloud Stream 概念如何映射到 RabbitMQ 的特定构造中。
用法
要使用 RabbitMQ 绑定器,您可以使用以下 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 活关工具概述
以下简化图展示了RabbitMQ绑定器的作方式:
默认情况下,RabbitMQ Binder 的实现会将每个目的地映射到话题交流.
对于每个消费者群体,一个队列与 绑定话题交流.
每个消费者实例都有对应的RabbitMQ消费者其组的实例队列.
对于分区生产者和消费者,队列后缀为分区索引,并使用分区索引作为路由键。
对于匿名消费者(那些没有群属性),使用自动删除队列(带有随机唯一名称)。
通过使用可选的autoBindDlq选项中,你可以配置绑定器创建和配置死号队列(DLQ)(以及死号交换)DLX以及路由基础设施)。
默认情况下,死字母队列包含目的名称,并附加.dlq.
如果启用了重试 (最大尝试次数> 1),失败消息在重试用尽后传递给DLQ。
如果重试被禁用 (最大尝试次数 = 1),你应该设置requeueRejected自false(默认)这样失败的消息会被路由到DLQ,而不是重新排队。
另外转载ToDlq导致绑定器向DLQ发布失败消息(而非拒绝)。
该功能允许额外信息(例如栈迹在x-exception-栈追踪在邮件中添加首部。
参见框架MaxHeadroom(框架最大头量)属性关于截断栈迹的信息。
这个选项不需要启用重试。
你只需尝试一次,就能重新发布失败消息。
从1.2版本开始,你可以配置重发布消息的传递方式。
参见republishDeliveryMode属性.
如果流监听器抛出ImmediateAcknowledgeAmqpException,DLQ被绕过,消息被直接丢弃。
从2.1版本开始,无论 设置如何,这都成立转载ToDlq;之前只有在转载ToDlq是false.
设置requeueRejected自true(其中republishToDlq=false) 会导致消息不断重新排队和重新投递,除非失败原因是暂时性的,否则这很可能不是你想要的。
一般来说,你应该在绑定器里通过设置来启用重试最大尝试次数通过设置,大于一或转载ToDlq自true. |
从3.1.2版本开始,如果消费者被标记为交易发布到DLQ的玩家将参与交易。
这允许在发布失败时回滚交易(例如用户未被授权发布到死信交换)。
此外,如果连接工厂配置为发布者确认或返回,向DLQ的出版商会等待确认并检查返回消息。
如果收到负面确认或返回消息,活页夹会抛出AmqpRejectAndDontRequeueException允许经纪人处理向DLQ发布,就像转载ToDlq财产是false.
有关这些属性的更多信息,请参见RabbitMQ活板属性。
该框架没有提供任何标准机制来消耗死信(或将其重新路由回主队列)。 部分选项在死字队列处理中有所描述。
当 Spring Cloud Stream 应用中使用多个 RabbitMQ 绑定器时,关闭“RabbitAutoConfiguration”以避免出现相同的配置非常重要兔子自动配置被贴在两本活页夹上。
你可以通过以下方式排除该类@SpringBootApplication注解。 |
从2.0版本开始,兔子消息频道绑定器设置RabbitTemplate.userPublisherConnection属性到true这样非事务生产者就能避免消费者的死锁,比如缓存连接因代理的内存警报而被阻断时。
目前,多重消费者(单个消费者监听多个队列)仅支持消息驱动消费者;被轮询的消费者只能从单个队列中获取消息。 |
配置选项
本节包含针对RabbitMQ绑定器和绑定通道的具体设置。
有关一般的绑定配置选项和属性,请参见 Spring Cloud Stream 核心文档。