|
对于最新稳定版本,请使用spring-cloud-stream 5.0.1! |
RabbitMQ绑定程序参考指南
本指南介绍了RabbitMQ对Spring Cloud StreamBinder的实现。它包含有关其设计、使用和配置选项的信息,以及有关StreamCloudStream概念如何映射到RabbitMQ特定构造的信息。
用法
要使用RabbitMQ绑定器,您可以将其添加到您的Spring Cloud流应用程序中,方法是使用以下Maven坐标:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
相反,您可以使用Spring Cloud Stream RabbitMQStarters,如下所示:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
RabbitMQ 绑定程序概述
以下简化示意图展示了RabbitMQ binder的运行方式:
默认情况下,RabbitMQ 绑定实现将每个目标映射到TopicExchange。对于每个消费者组,Queue绑定到该TopicExchange。每个消费者实例都有一个对应的RabbitMQConsumer实例,用于其组的Queue。对于分区生产者和使用者,队列使用分区索引后缀,并将分区索引作为路由密钥。对于匿名使用者(没有group属性),将使用自动删除队列(带随机唯一名称)。
通过可选的autoBindDlq选项,您可以配置绑定器创建并配置死信队列(DLQs)(以及一个死信交换DLX,以及路由基础设施)。默认情况下,死信队列的名称为目的地名称加上 .dlq。如果启用了重试(maxAttempts > 1),则在重试用尽后,会将失败的消息传递到死信队列。如果重试被禁用(maxAttempts = 1),则应将requeueRejected设置为false(默认值),以便失败的消息被路由到DLQ,而不是重新排队。
另外,republishToDlq 会导致绑定程序将失败的消息发布到 DLQ(而不是拒绝它)。This feature lets additional information (such as the stack trace in the x-exception-stacktrace header) be added to the message in headers.查看 frameMaxHeadroom 属性 了解有关截断堆栈跟踪的信息。这个选项不需要启用重试。您可以仅在一次尝试后重新发布失败的消息。
Starting with version 1.
2,您可以配置重新发布消息的交付模式。请参阅republishDeliveryMode 属性。
如果流侦听器抛出一个ImmediateAcknowledgeAmqpException,则会跳过DLQ,并且消息将被简单地丢弃。从版本2.1开始,无论republishToDlq如何设置,这都是正确的;在以前,只有当republishToDlq为false时才成立。
将 requeueRejected 设置为 true(使用 republishToDlq=false )会导致消息被重新排队并不断重新传递,除非故障是瞬态的,否则这可能不是您想要的操作。 通常,您应通过将 maxAttempts 设置为大于一或将 republishToDlq 设置为 true 来在绑定器中启用重试。 |
从版本 3.1.2 开始,如果消费者标记为 transacted,向死信队列(DLQ)发布消息将参与事务。
这允许在由于某些原因导致发布失败时回滚事务(例如,用户没有权限向死信交换机发布消息)。
此外,如果连接工厂配置了发布确认或返回机制,则向 DLQ 发布消息会等待确认并检查是否有返回的消息。
如果收到否定确认或返回消息,绑定器将抛出 AmqpRejectAndDontRequeueException,使代理可以像设置了 republishToDlq 属性为 false 一样处理向 DLQ 的发布。
有关这些属性的更多信息,请参阅RabbitMQ绑定器属性。
该框架不提供任何标准机制来处理死信消息(或将其重新路由回主队列)。
死信队列处理中描述了一些选项。
当在Spring Cloud Stream应用程序中使用多个RabbitMQ绑定器时,禁用'RabbitAutoConfiguration'很重要,以避免相同的配置从RabbitAutoConfiguration应用于两个绑定器。您可以使用 @SpringBootApplication注解来排除该类。 |
从版本2.0开始,RabbitMessageChannelBinder 将 RabbitTemplate.userPublisherConnection 属性设置为 true,以便非事务性生产者避免死锁,这可能会导致由于代理上的内存警报而导致缓存连接被阻塞。
| 当前,仅支持消息驱动的消费者(即单个消费者监听多个队列);轮询式消费者只能从单一队列中检索消息。 |
配置选项
本节包含与 RabbitMQ 绑定程序和绑定通道相关的设置。
有关通用绑定配置选项和属性的信息,请参阅Spring Cloud Stream核心文档。