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