RabbitMQ 繫結器參考指南

本指南描述了 Spring Cloud Stream Binder 的 RabbitMQ 實現。它包含有關其設計、用法和配置選項的資訊,以及 Stream Cloud Stream 概念如何對映到 RabbitMQ 特定構造的資訊。

用法

要使用 RabbitMQ binder,您可以將其新增到 Spring Cloud Stream 應用程式中,方法是使用以下 Maven 座標

<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 實現將每個目標對映到一個 TopicExchange。對於每個消費者組,一個 Queue 繫結到該 TopicExchange。每個消費者例項都有一個相應的 RabbitMQ Consumer 例項,用於其組的 Queue。對於分割槽生產者和消費者,佇列的字尾是分割槽索引,並使用分割槽索引作為路由鍵。對於匿名消費者(那些沒有 group 屬性的消費者),使用一個自動刪除佇列(具有隨機的唯一名稱)。

透過使用可選的 autoBindDlq 選項,您可以將 binder 配置為建立和配置死信佇列 (DLQ)(以及一個死信交換機 DLX 和路由基礎設施)。預設情況下,死信佇列的名稱是目標名稱,後附加 .dlq。如果啟用了重試(maxAttempts > 1),失敗的訊息在重試耗盡後會傳遞到 DLQ。如果停用了重試(maxAttempts = 1),您應該將 requeueRejected 設定為 false(預設值),以便失敗的訊息被路由到 DLQ,而不是重新排隊。此外,republishToDlq 會導致 binder 將失敗的訊息釋出到 DLQ(而不是拒絕它)。此功能允許將額外的資訊(例如 x-exception-stacktrace 頭中的堆疊跟蹤)新增到訊息頭中。有關截斷堆疊跟蹤的資訊,請參閱 frameMaxHeadroom 屬性。此選項不需要啟用重試。您可以在一次嘗試後重新發布失敗的訊息。從 1.2 版開始,您可以配置重新發布訊息的傳遞模式。請參閱 republishDeliveryMode 屬性

如果流監聽器丟擲 ImmediateAcknowledgeAmqpException,DLQ 將被繞過,訊息簡單地被丟棄。從 2.1 版本開始,無論 republishToDlq 的設定如何,這都適用;以前,只有當 republishToDlqfalse 時才是這種情況。

requeueRejected 設定為 true(並設定 republishToDlq=false)會導致訊息被重新排隊並不斷重新傳遞,這可能不是您想要的,除非失敗的原因是臨時的。通常,您應該透過將 maxAttempts 設定為大於 1 或將 republishToDlq 設定為 true 來在 binder 內部啟用重試。

從 3.1.2 版本開始,如果消費者被標記為 transacted,釋出到 DLQ 將參與事務。這允許在釋出因某種原因失敗時(例如,如果使用者無權釋出到死信交換機)回滾事務。此外,如果連線工廠配置了釋出者確認或返回,則釋出到 DLQ 將等待確認並檢查返回的訊息。如果收到否定確認或返回的訊息,binder 將丟擲 AmqpRejectAndDontRequeueException,允許代理處理釋出到 DLQ,就像 republishToDlq 屬性為 false 一樣。

有關這些屬性的更多資訊,請參閱 RabbitMQ Binder 屬性

該框架不提供任何標準機制來消費死信訊息(或將其重新路由回主佇列)。死信佇列處理 中描述了一些選項。

當在 Spring Cloud Stream 應用程式中使用多個 RabbitMQ binder 時,務必停用 'RabbitAutoConfiguration',以避免將來自 RabbitAutoConfiguration 的相同配置應用於兩個 binder。您可以使用 @SpringBootApplication 註解排除該類。

從 2.0 版本開始,RabbitMessageChannelBinderRabbitTemplate.userPublisherConnection 屬性設定為 true,以便非事務性生產者避免消費者死鎖,這可能在代理上發生 記憶體警報 時,如果快取的連線被阻塞。

目前,multiplex 消費者(單個消費者監聽多個佇列)僅支援訊息驅動型消費者;輪詢型消費者只能從單個佇列中檢索訊息。

配置選項

本節包含 RabbitMQ Binder 和繫結通道的特定設定。

有關一般繫結配置選項和屬性,請參閱 Spring Cloud Stream 核心文件

© . This site is unofficial and not affiliated with VMware.