对于最新的稳定版本,请使用 spring-cloud-stream 4.3.0spring-doc.cadn.net.cn

RabbitMQ Binder 参考指南

本指南介绍了 Spring Cloud Stream Binder 的 RabbitMQ 实现。 它包含有关其设计、用法和配置选项的信息,以及有关 Stream Cloud Stream 概念如何映射到 RabbitMQ 特定构造的信息。spring-doc.cadn.net.cn

用法

要使用 RabbitMQ 绑定器,您可以使用以下 Maven 坐标将其添加到 Spring Cloud Stream 应用程序中:spring-doc.cadn.net.cn

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>

或者,您可以使用 Spring Cloud Stream RabbitMQ Starter,如下所示:spring-doc.cadn.net.cn

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

RabbitMQ Binder 概述

以下简化图显示了 RabbitMQ 绑定程序的运行方式:spring-doc.cadn.net.cn

默认情况下,RabbitMQ Binder 实现将每个目标映射到TopicExchange. 对于每个消费者组,一个Queue与此绑定TopicExchange. 每个消费者实例都有对应的 RabbitMQConsumer实例的Queue. 对于分区的生产者和消费者,队列以分区索引为后缀,并使用分区索引作为路由键。 对于匿名消费者(那些没有group属性),则使用自动删除队列(具有随机的唯一名称)。spring-doc.cadn.net.cn

通过使用可选的autoBindDlq选项,您可以配置活页夹以创建和配置死信队列 (DLQ)(以及死信交换DLX,以及路由基础设施)。 默认情况下,死信队列具有目标名称,并附加.dlq. 如果启用重试 (maxAttempts > 1),在重试用尽后,失败的消息将传递到 DLQ。 如果禁用重试 (maxAttempts = 1),您应该将requeueRejectedfalse(缺省值),以便将失败的消息路由到 DLQ,而不是重新排队。 另外republishToDlq导致 Binder 将失败的消息发布到 DLQ(而不是拒绝它)。 此功能允许其他信息(例如x-exception-stacktraceheader)添加到 headers 中的消息中。 请参阅frameMaxHeadroom属性有关截断堆栈跟踪的信息。 此选项不需要启用重试。 只需尝试一次即可重新发布失败的邮件。 从 1.2 版本开始,您可以配置重新发布的消息的传递方式。 请参阅republishDeliveryMode属性.spring-doc.cadn.net.cn

如果流侦听器抛出ImmediateAcknowledgeAmqpException,则绕过 DLQ 并直接丢弃消息。 从 2.1 版开始,无论republishToDlq;以前只有在以下情况下才会出现这种情况republishToDlqfalse.spring-doc.cadn.net.cn

设置requeueRejectedtrue(与republishToDlq=false) 会导致消息不断重新排队和重新传递,这可能不是您想要的,除非失败原因是暂时的。 通常,应通过设置maxAttempts设置为大于 1 或通过设置republishToDlqtrue.

从 3.1.2 版开始,如果使用者标记为transacted,发布到 DLQ 将参与交易。 这允许在发布由于某种原因失败时回滚事务(例如,如果用户无权发布到死信交换)。 此外,如果连接工厂配置为发布者确认或返回,则 DLQ 的发布将等待确认并检查返回的消息。 如果收到否定确认或返回的消息,绑定程序将抛出AmqpRejectAndDontRequeueException,允许代理负责发布到 DLQ,就好像republishToDlq属性是false.spring-doc.cadn.net.cn

有关这些属性的更多信息,请参阅 RabbitMQ Binder 属性。spring-doc.cadn.net.cn

该框架不提供任何标准机制来使用死信消息(或将它们重新路由回主队列)。 死信队列处理中介绍了一些选项。spring-doc.cadn.net.cn

当在 Spring Cloud Stream 应用程序中使用多个 RabbitMQ 绑定器时,请务必禁用“RabbitAutoConfiguration”以避免从RabbitAutoConfiguration应用于两个粘合剂。 您可以使用@SpringBootApplication注解。

从 2.0 版开始,RabbitMessageChannelBinderRabbitTemplate.userPublisherConnection属性设置为true这样,非事务生产者就可以避免消费者的死锁,如果缓存的连接由于代理上的内存警报而被阻止,则可能会发生这种情况。spring-doc.cadn.net.cn

目前,一个multiplexConsumer(监听多个队列的单个消费者)仅支持消息驱动的消费者;轮询的使用者只能从单个队列中检索消息。

配置选项

本节包含特定于 RabbitMQ Binder 和绑定通道的设置。spring-doc.cadn.net.cn

有关常规绑定配置选项和属性,请参阅 Spring Cloud Stream 核心文档spring-doc.cadn.net.cn