此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 spring-cloud-stream 4.1.4spring-doc.cn

RabbitMQ Binder 参考指南

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

用法

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

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

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

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

RabbitMQ Binder 概述

以下简化图显示了 RabbitMQ Binder 的运行方式:spring-doc.cn

默认情况下,RabbitMQ Binder 实现将每个目标映射到一个 . 对于每个使用者组, a 绑定到该 . 每个使用者实例都有其组的相应 RabbitMQ 实例。 对于分区的创建者和使用者,队列以分区索引为后缀,并使用分区索引作为路由键。 对于匿名使用者(没有属性的使用者),将使用自动删除队列(具有随机的唯一名称)。TopicExchangeQueueTopicExchangeConsumerQueuegroupspring-doc.cn

通过使用可选选项,您可以配置 Binder 以创建和配置死信队列 (DLQ)(以及 dead-letter exchange 以及路由基础设施)。 默认情况下,死信队列具有目标的名称,并附加 . 如果启用了重试 (),则在重试用尽后,失败的消息将传送到 DLQ。 如果禁用重试 (),则应设置为(默认值),以便将失败的消息路由到 DLQ,而不是重新排队。 此外,还会导致 Binder 将失败的消息发布到 DLQ(而不是拒绝它)。 此功能允许将其他信息(如 Headers 中的堆栈跟踪)添加到 Headers 中的消息中。 有关截断堆栈跟踪的信息,请参阅 frameMaxHeadroom 属性。 此选项不需要启用 retry。 您只需尝试一次即可重新发布失败的消息。 从版本 1.2 开始,您可以配置重新发布的消息的传递模式。 请参阅 republishDeliveryMode 属性autoBindDlqDLX.dlqmaxAttempts > 1maxAttempts = 1requeueRejectedfalserepublishToDlqx-exception-stacktracespring-doc.cn

如果流侦听器抛出 ,则会绕过 DLQ,并简单地丢弃该消息。 从版本 2.1 开始,无论 的设置如何;以前,只有当 是 时,才会出现这种情况。ImmediateAcknowledgeAmqpExceptionrepublishToDlqrepublishToDlqfalsespring-doc.cn

设置为 (with ) 会导致消息重新排队并持续重新传送,除非失败的原因是暂时的,否则这可能不是您想要的。 通常,您应该通过设置为 greater than 1 或设置为 在 Binder 中启用重试。requeueRejectedtruerepublishToDlq=falsemaxAttemptsrepublishToDlqtrue

从版本 3.1.2 开始,如果使用者标记为 ,则发布到 DLQ 将参与事务。 这允许事务在发布因某种原因失败时回滚(例如,如果用户无权发布到死信交换)。 此外,如果连接工厂配置为发布者确认或返回,则发布到 DLQ 将等待确认并检查返回的消息。 如果收到否定确认或返回的消息,则 Binder 将引发 ,允许代理负责发布到 DLQ,就像该属性为 一样。transactedAmqpRejectAndDontRequeueExceptionrepublishToDlqfalsespring-doc.cn

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

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

当在 Spring Cloud Stream 应用程序中使用多个 RabbitMQ Binders 时,禁用“RabbitAutoConfiguration”以避免将相同的配置应用于两个 Binders 非常重要。 您可以使用注释排除该类。RabbitAutoConfiguration@SpringBootApplication

从版本 2.0 开始,将属性设置为 ,以便非事务性创建者避免使用者死锁,如果缓存的连接由于代理上的内存警报而被阻止,则可能会发生这种情况。RabbitMessageChannelBinderRabbitTemplate.userPublisherConnectiontruespring-doc.cn

目前,只有消息驱动的使用者支持使用者(侦听多个队列的单个使用者);轮询的使用者只能从单个队列中检索消息。multiplex

配置选项

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

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