2.2 版自 2.1 版以來的變更

本節描述 2.1 版和 2.2 版之間的變更。

套件變更

以下類別/介面已從 org.springframework.amqp.rabbit.core.support 移動到 org.springframework.amqp.rabbit.batch

  • BatchingStrategy

  • MessageBatch

  • SimpleBatchingStrategy

此外,ListenerExecutionFailedException 已從 org.springframework.amqp.rabbit.listener.exception 移動到 org.springframework.amqp.rabbit.support

依賴性變更

JUnit (4) 現在是可選的依賴性,並且不再作為傳遞依賴性出現。

spring-rabbit-junit 模組現在是 spring-rabbit-test 模組中的 compile 依賴性,以便在僅使用單個 spring-rabbit-test 時,獲得 AMQP 組件的完整堆疊測試工具,從而獲得更好的目標應用程式開發體驗。

[[-breaking-api-changes]] == "破壞性" API 變更

JUnit (5) RabbitAvailableCondition.getBrokerRunning() 現在返回 BrokerRunningSupport 實例,而不是取決於 JUnit 4 的 BrokerRunning。它具有相同的 API,因此只需變更任何參考的類別名稱即可。有關更多資訊,請參閱 JUnit5 條件

ListenerContainer 變更

預設情況下,即使確認模式為手動,具有嚴重例外的訊息現在也會被拒絕,而不會重新排隊。有關更多資訊,請參閱 例外處理

現在可以使用 Micrometer Timer 監控監聽器效能。有關更多資訊,請參閱 監控監聽器效能

@RabbitListener 變更

您現在可以在每個監聽器上配置 executor,覆寫工厂設定,以更輕鬆地識別與監聽器關聯的執行緒。您現在可以使用註解的 ackMode 屬性覆寫容器工厂的 acknowledgeMode 屬性。有關更多資訊,請參閱 覆寫容器工厂屬性

當使用 批次處理 時,@RabbitListener 方法現在可以在一次呼叫中接收完整的訊息批次,而不是一次一個地接收它們。

當一次一個地接收批次訊息時,最後一個訊息的 isLastInBatch 訊息屬性設定為 true。

此外,接收到的批次訊息現在包含 amqp_batchSize 標頭。

監聽器也可以使用在 SimpleMessageListenerContainer 中建立的批次,即使該批次不是由生產者建立的。有關更多資訊,請參閱 選擇容器

Jackson2JsonMessageConverter 現在支援 Spring Data Projection 介面。有關更多資訊,請參閱 使用 Spring Data Projection 介面

如果沒有 contentType 屬性,或者它是預設值 (application/octet-string),則 Jackson2JsonMessageConverter 現在假設內容為 JSON。有關更多資訊,請參閱 Message 轉換

同樣地,如果沒有 contentType 屬性,或者它是預設值 (application/octet-string),則 Jackson2XmlMessageConverter 現在假設內容為 XML。有關更多資訊,請參閱 Jackson2XmlMessageConverter

@RabbitListener 方法傳回結果時,bean 和 Method 現在可在回覆訊息屬性中使用。這允許配置 beforeSendReplyMessagePostProcessor,例如,在回覆中設定標頭以指示在伺服器上調用了哪個方法。有關更多資訊,請參閱 回覆管理

您現在可以配置 ReplyPostProcessor 以在傳送回覆訊息之前對其進行修改。有關更多資訊,請參閱 回覆管理

AMQP 日誌記錄 Appenders 變更

Log4J 和 Logback AmqpAppender 現在支援 verifyHostname SSL 選項。

此外,現在可以將這些 appender 配置為不將 MDC 條目新增為標頭。已引入 addMdcAsHeaders 布林選項以配置此行為。

appenders 現在支援 SaslConfig 屬性。

有關更多資訊,請參閱 日誌子系統 AMQP Appenders

MessageListenerAdapter 變更

MessageListenerAdapter 現在提供新的 buildListenerArguments(Object, Channel, Message) 方法來建構要傳遞到目標監聽器的引數陣列,而舊的方法已棄用。有關更多資訊,請參閱 MessageListenerAdapter

[[exchange/queue-declaration-changes]] == Exchange/Queue 宣告變更

用於建立 ExchangeQueue 物件以供 RabbitAdmin 宣告的 ExchangeBuilderQueueBuilder 流暢 API 現在支援「眾所周知」的引數。有關更多資訊,請參閱 佇列和 Exchange 的 Builder API

RabbitAdmin 具有新的屬性 explicitDeclarationsOnly。有關更多資訊,請參閱 條件式宣告

連線工厂變更

CachingConnectionFactory 具有新的屬性 shuffleAddresses。當提供 Broker 節點位址列表時,該列表將在建立連線之前被打亂,以便嘗試連線的順序是隨機的。有關更多資訊,請參閱 連線到叢集

當使用發佈者確認和回傳時,現在會在連線工厂的 executor 上調用回呼。如果您從回呼中執行 Rabbit 操作,這可以避免 amqp-clients 程式庫中可能發生的死鎖。有關更多資訊,請參閱 關聯的發佈者確認和回傳

此外,發佈者確認類型現在使用 ConfirmType 列舉而不是兩個互斥的 setter 方法來指定。

啟用 SSL 時,RabbitConnectionFactoryBean 現在預設使用 TLS 1.2。有關更多資訊,請參閱 RabbitConnectionFactoryBean 和配置 SSL

新的 MessagePostProcessor 類別

新增了 DeflaterPostProcessorInflaterPostProcessor 類別,以在訊息 content-encoding 設定為 deflate 時分別支援壓縮和解壓縮。

其他變更

Declarables 物件(用於宣告多個佇列、Exchange、綁定)現在具有每個類型的篩選器 getter。有關更多資訊,請參閱 宣告 Exchange、佇列和綁定的集合

您現在可以在 RabbitAdmin 處理宣告之前自訂每個 Declarable bean。有關更多資訊,請參閱 自動宣告 Exchange、佇列和綁定

singleActiveConsumer() 已新增至 QueueBuilder 以設定 x-single-active-consumer 佇列引數。有關更多資訊,請參閱 佇列和 Exchange 的 Builder API

現在使用 getName() 而不是 toString() 映射類型為 Class<?> 的輸出標頭。有關更多資訊,請參閱 訊息屬性轉換器

現在支援復原失敗的生產者建立的批次。有關更多資訊,請參閱 使用批次監聽器重試