1.6 版自 1.5 版以來的變更

測試支援

現在提供新的測試支援程式庫。請參閱 測試支援 以取得更多資訊。

Builder

現在提供 Builder,為設定 QueueExchange 物件提供流暢的 API。請參閱 佇列和交換器的 Builder API 以取得更多資訊。

命名空間變更

連線 Factory

您現在可以將 thread-factory 新增至連線 Factory Bean 宣告中,例如,為 amqp-client 程式庫建立的執行緒命名。請參閱 連線和資源管理 以取得更多資訊。

當您使用 CacheMode.CONNECTION 時,現在可以限制允許的連線總數。請參閱 連線和資源管理 以取得更多資訊。

佇列定義

您現在可以為匿名佇列提供命名策略。請參閱 AnonymousQueue 以取得更多資訊。

監聽器容器變更

閒置訊息監聽器偵測

您現在可以設定監聽器容器,以便在閒置時發布 ApplicationEvent 實例。請參閱 偵測閒置的非同步消費者 以取得更多資訊。

不符的佇列偵測

預設情況下,當監聽器容器啟動時,如果偵測到具有不符屬性或引數的佇列,容器會記錄例外狀況,但會繼續監聽。容器現在有一個名為 mismatchedQueuesFatal 的屬性,如果啟動期間偵測到問題,此屬性會阻止容器 (和內容) 啟動。如果在稍後偵測到問題 (例如從連線故障恢復後),它也會停止容器。請參閱 訊息監聽器容器設定 以取得更多資訊。

監聽器容器記錄

現在,監聽器容器將其 beanName 提供給內部 SimpleAsyncTaskExecutor 作為 threadNamePrefix。這對於記錄分析很有用。

預設錯誤處理常式

預設錯誤處理常式 (ConditionalRejectingErrorHandler) 現在將無法復原的 @RabbitListener 例外狀況視為嚴重錯誤。請參閱 例外處理 以取得更多資訊。

AutoDeclareRabbitAdmin 實例

請參閱 訊息監聽器容器設定 (autoDeclare),以了解該選項在使用應用程式內容中的 RabbitAdmin 實例方面的一些語意變更。

AmqpTemplate:接收與逾時

已為 AmqpTemplate 及其 RabbitTemplate 實作引入許多新的具有 timeoutreceive() 方法。請參閱 輪詢消費者 以取得更多資訊。

使用 AsyncRabbitTemplate

已引入新的 AsyncRabbitTemplate。此範本提供許多傳送和接收方法,其中傳回值為 ListenableFuture,稍後可用於同步或非同步取得結果。請參閱 非同步 Rabbit 範本 以取得更多資訊。

RabbitTemplate 變更

1.4.1 引入了在 Broker 支援時使用 直接回覆到 的能力。這比為每個回覆使用暫時佇列更有效率。此版本可讓您覆寫此預設行為,並透過將 useTemporaryReplyQueues 屬性設定為 true 來使用暫時佇列。請參閱 RabbitMQ 直接回覆到 以取得更多資訊。

RabbitTemplate 現在支援 user-id-expression (使用 Java 設定時為 userIdExpression)。請參閱 已驗證使用者 ID RabbitMQ 文件已驗證使用者 ID 以取得更多資訊。

訊息屬性

使用 CorrelationId

correlationId 訊息屬性現在可以是 String。請參閱 訊息屬性轉換器 以取得更多資訊。

長字串標頭

先前,DefaultMessagePropertiesConverter 將長度超過長字串限制 (預設為 1024) 的標頭「轉換」為 DataInputStream (實際上,它參考了 LongString 實例的 DataInputStream)。在輸出時,此標頭未轉換 (除了轉換為 String,例如,透過在串流上呼叫 toString() 得到的 java.io.DataInputStream@1d057a39)。

在此版本中,預設情況下,長 LongString 實例現在會保留為 LongString 實例。您可以使用 getBytes[]toString()getStream() 方法來存取內容。大型傳入的 LongString 現在在輸出時也會正確地「轉換」。

請參閱 訊息屬性轉換器 以取得更多資訊。

輸入傳遞模式

deliveryMode 屬性不再對應到 MessageProperties.deliveryMode。此變更避免了在將相同的 MessageProperties 物件用於傳送輸出訊息時發生非預期的傳播。相反地,輸入 deliveryMode 標頭會對應到 MessageProperties.receivedDeliveryMode

請參閱 訊息屬性轉換器 以取得更多資訊。

當使用註解端點時,標頭會在名為 AmqpHeaders.RECEIVED_DELIVERY_MODE 的標頭中提供。

請參閱 註解端點方法簽章 以取得更多資訊。

輸入使用者 ID

user_id 屬性不再對應到 MessageProperties.userId。此變更避免了在將相同的 MessageProperties 物件用於傳送輸出訊息時發生非預期的傳播。相反地,輸入 userId 標頭會對應到 MessageProperties.receivedUserId

請參閱 訊息屬性轉換器 以取得更多資訊。

當您使用註解端點時,標頭會在名為 AmqpHeaders.RECEIVED_USER_ID 的標頭中提供。

請參閱 註解端點方法簽章 以取得更多資訊。

RabbitAdmin 變更

宣告失敗

先前,ignoreDeclarationFailures 旗標僅對通道上的 IOException (例如不符的引數) 生效。現在它對任何例外狀況 (例如 TimeoutException) 都有效。此外,每當宣告失敗時,都會發布 DeclarationExceptionEventRabbitAdmin 最後的宣告事件也可作為屬性 lastDeclarationExceptionEvent 使用。請參閱 設定 Broker 以取得更多資訊。

@RabbitListener 變更

每個 Bean 的多個容器

當您使用 Java 8 或更新版本時,現在可以將多個 @RabbitListener 註解新增至 @Bean 類別或其方法。當使用 Java 7 或更早版本時,您可以使用 @RabbitListeners 容器註解來提供相同的功能。請參閱 @Repeatable @RabbitListener 以取得更多資訊。

@SendTo SpEL 運算式

對於沒有 replyTo 屬性的路由回覆,@SendTo 現在可以是針對請求/回覆評估的 SpEL 運算式。請參閱 回覆管理 以取得更多資訊。

@QueueBinding 改善

您現在可以在 @QueueBinding 註解中指定佇列、交換器和綁定的引數。@QueueBinding 現在支援標頭交換器。請參閱 註解驅動的監聽器端點 以取得更多資訊。

延遲訊息交換

Spring AMQP 現在對 RabbitMQ 延遲訊息交換外掛程式提供一流的支援。請參閱 延遲訊息交換 以取得更多資訊。

交換器內部旗標

任何 Exchange 定義現在都可以標示為 internal,而 RabbitAdmin 在宣告交換器時會將值傳遞給 Broker。請參閱 設定 Broker 以取得更多資訊。

CachingConnectionFactory 變更

CachingConnectionFactory 快取統計資訊

CachingConnectionFactory 現在在執行階段和透過 JMX 提供快取屬性。請參閱 執行階段快取屬性 以取得更多資訊。

存取底層 RabbitMQ 連線 Factory

已新增新的 Getter 以提供對底層 Factory 的存取。例如,您可以使用此 Getter 來新增自訂連線屬性。請參閱 新增自訂用戶端連線屬性 以取得更多資訊。

通道快取

預設通道快取大小已從 1 增加到 25。請參閱 連線和資源管理 以取得更多資訊。

此外,SimpleMessageListenerContainer 不再調整快取大小以至少與 concurrentConsumers 的數量一樣大,因為容器消費者通道永遠不會快取,這是多餘的。

使用 RabbitConnectionFactoryBean

Factory Bean 現在公開一個屬性,以將用戶端連線屬性新增至結果 Factory 建立的連線。

Java 還原序列化

當您使用 Java 還原序列化時,現在可以設定允許類別的「允許清單」。如果您接受來自不受信任來源的具有序列化 Java 物件的訊息,您應該考慮建立允許清單。請參閱 Java 還原序列化 以取得更多資訊。

JSON MessageConverter

JSON 訊息轉換器的改進現在允許使用訊息標頭中沒有型別資訊的訊息。請參閱 用於註解方法的訊息轉換[json-message-converter] 以取得更多資訊。

記錄 Appender

Log4j 2

已新增 Log4j 2 Appender,現在可以使用 addresses 屬性設定 Appender 以連線到 Broker 叢集。

用戶端連線屬性

您現在可以將自訂用戶端連線屬性新增至 RabbitMQ 連線。

請參閱 記錄子系統 AMQP Appender 以取得更多資訊。