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 模組中的一個 編譯時 依賴項,以便在僅使用單個 spring-rabbit-test 即可獲得 AMQP 元件的完整測試工具棧時,提供更好的目標應用開發體驗。

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

JUnit (5) 的 RabbitAvailableCondition.getBrokerRunning() 現在返回一個 `BrokerRunningSupport` 例項,而不是依賴於 JUnit 4 的 `BrokerRunning`。它們擁有相同的 API,因此只需更改任何引用的類名即可。更多資訊請參見 JUnit5 Conditions

監聽器容器變更

預設情況下,帶有致命異常的訊息現在會被拒絕,而不是重新入隊,即使確認模式是手動。更多資訊請參見 異常處理

現在可以使用 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 日誌 Appender 變更

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

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

這些 appender 現在支援 SaslConfig 屬性。

更多資訊請參見 日誌子系統 AMQP Appender

MessageListenerAdapter 變更

MessageListenerAdapter 現在提供了一個新的 buildListenerArguments(Object, Channel, Message) 方法來構建傳遞給目標監聽器的引數陣列,舊的方法已被棄用。更多資訊請參見 MessageListenerAdapter

[[exchange/queue-declaration-changes]] == 交換機/佇列宣告變更

用於由 RabbitAdmin 宣告 ExchangeQueue 物件的 ExchangeBuilderQueueBuilder 流式 API 現在支援“已知”引數。更多資訊請參見 佇列和交換機的 Builder API

RabbitAdmin 有一個新的屬性 explicitDeclarationsOnly。更多資訊請參見 條件宣告

連線工廠變更

CachingConnectionFactory 有一個新的屬性 shuffleAddresses。當提供 broker 節點地址列表時,列表在建立連線之前會被打亂,從而使連線嘗試的順序隨機化。更多資訊請參見 連線到叢集

使用 Publisher confirms 和 returns 時,回撥現在在連線工廠的 executor 上呼叫。這避免瞭如果在回撥中執行 rabbit 操作可能導致的 amqp-clients 庫中的死鎖。更多資訊請參見 關聯的 Publisher Confirms 和 Returns

此外,publisher confirm 型別現在使用 ConfirmType 列舉指定,而不是兩個互斥的 setter 方法。

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

新的 MessagePostProcessor 類

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

其他變更

Declarables 物件(用於宣告多個佇列、交換機、繫結)現在為每種型別提供了過濾的 getter 方法。更多資訊請參見 宣告交換機、佇列和繫結的集合

現在可以在 RabbitAdmin 處理宣告之前自定義每個 Declarable bean。更多資訊請參見 自動宣告交換機、佇列和繫結

已向 QueueBuilder 新增 singleActiveConsumer() 方法,用於設定 x-single-active-consumer 佇列引數。更多資訊請參見 佇列和交換機的 Builder API

型別為 Class 的出站頭資訊現在使用 getName() 而非 toString() 進行對映。更多資訊請參見 訊息屬性轉換器

現在支援恢復生產者建立的失敗批次。更多資訊請參見 批處理監聽器重試