这个版本仍在开发中,尚未达到稳定状态。要使用最新稳定版,请使用 spring-cloud-stream 5.0.1 spring-doc.cadn.net.cn

RabbitMQ绑定程序参考指南

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

用法

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

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

相反,您可以使用Spring Cloud Stream RabbitMQStarters,如下所示:spring-doc.cadn.net.cn

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

RabbitMQ 绑定程序概述

以下简化示意图展示了RabbitMQ binder的运行方式:spring-doc.cadn.net.cn

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

通过可选的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 属性 了解有关截断堆栈跟踪的信息。这个选项不需要启用重试。您可以仅在一次尝试后重新发布失败的消息。spring-doc.cadn.net.cn

Starting with version 1.spring-doc.cadn.net.cn

2,您可以配置重新发布消息的交付模式。请参阅 republishDeliveryMode 属性

spring-doc.cadn.net.cn

如果流侦听器抛出一个ImmediateAcknowledgeAmqpException,则会跳过DLQ,并且消息将被简单地丢弃。从版本2.1开始,无论republishToDlq如何设置,这都是正确的;在以前,只有当republishToDlqfalse时才成立。spring-doc.cadn.net.cn

requeueRejected 设置为 true(使用 republishToDlq=false )会导致消息被重新排队并不断重新传递,除非故障是瞬态的,否则这可能不是您想要的操作。 通常,您应通过将 maxAttempts 设置为大于一或将 republishToDlq 设置为 true 来在绑定器中启用重试。

从版本 3.1.2 开始,如果消费者标记为 transacted,向死信队列(DLQ)发布消息将参与事务。
这允许在由于某些原因导致发布失败时回滚事务(例如,用户没有权限向死信交换机发布消息)。
此外,如果连接工厂配置了发布确认或返回机制,则向 DLQ 发布消息会等待确认并检查是否有返回的消息。
如果收到否定确认或返回消息,绑定器将抛出 AmqpRejectAndDontRequeueException,使代理可以像设置了 republishToDlq 属性为 false 一样处理向 DLQ 的发布。spring-doc.cadn.net.cn

有关这些属性的更多信息,请参阅RabbitMQ绑定器属性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

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

配置选项

本节包含与 RabbitMQ 绑定程序和绑定通道相关的设置。spring-doc.cadn.net.cn

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