1.6 相較 1.5 的變化
測試支援
現在提供了一個新的測試支援庫。有關更多資訊,請參閱測試支援。
構建器
現在提供了構建器,它們為配置 Queue 和 Exchange 物件提供了流暢的 API。有關更多資訊,請參閱佇列和交換器的構建器 API。
名稱空間更改
連線工廠
現在可以向連線工廠 bean 宣告新增 thread-factory,例如,用於命名由 amqp-client 庫建立的執行緒。有關更多資訊,請參閱連線和資源管理。
使用 CacheMode.CONNECTION 時,現在可以限制允許的總連線數。有關更多資訊,請參閱連線和資源管理。
佇列定義
現在可以為匿名佇列提供命名策略。有關更多資訊,請參閱AnonymousQueue。
偵聽器容器的更改
空閒訊息監聽器檢測
現在可以配置監聽器容器,使其在空閒時釋出 ApplicationEvent 例項。有關更多資訊,請參閱檢測空閒的非同步消費者。
佇列不匹配檢測
預設情況下,當監聽器容器啟動時,如果檢測到具有不匹配屬性或引數的佇列,容器會記錄異常但繼續監聽。容器現在有一個名為 mismatchedQueuesFatal 的屬性,如果問題在啟動期間檢測到,它會阻止容器(和上下文)啟動。如果問題在以後檢測到,例如從連線失敗中恢復後,它還會停止容器。有關更多資訊,請參閱訊息監聽器容器配置。
預設錯誤處理器
預設錯誤處理器(ConditionalRejectingErrorHandler)現在將不可恢復的 @RabbitListener 異常視為致命錯誤。有關更多資訊,請參閱異常處理。
AutoDeclare 和 RabbitAdmin 例項
有關該選項在使用應用程式上下文中的 RabbitAdmin 例項時的一些語義更改,請參閱訊息監聽器容器配置(autoDeclare)。
AmqpTemplate:帶超時的接收
AmqpTemplate 及其 RabbitTemplate 實現引入了許多新的帶 timeout 的 receive() 方法。有關更多資訊,請參閱輪詢消費者。
使用 AsyncRabbitTemplate
引入了一個新的 AsyncRabbitTemplate。此模板提供了許多傳送和接收方法,其返回值是一個 ListenableFuture,以後可以同步或非同步地獲取結果。有關更多資訊,請參閱非同步 Rabbit 模板。
RabbitTemplate 更改
1.4.1 引入了當 broker 支援時使用直接回復的功能。它比為每個回覆使用臨時佇列更高效。此版本允許您透過將 useTemporaryReplyQueues 屬性設定為 true 來覆蓋此預設行為並使用臨時佇列。有關更多資訊,請參閱RabbitMQ 直接回復。
RabbitTemplate 現在支援 user-id-expression(使用 Java 配置時為 userIdExpression)。有關更多資訊,請參閱Validated User-ID RabbitMQ 文件和Validated User Id。
訊息屬性
使用 CorrelationId
correlationId 訊息屬性現在可以是 String。有關更多資訊,請參閱訊息屬性轉換器。
長字串頭
以前,DefaultMessagePropertiesConverter 將超過長字串限制(預設 1024)的頭“轉換”為 DataInputStream(實際上,它引用了 LongString 例項的 DataInputStream)。在輸出時,此頭未轉換(除了轉換為 String,例如透過呼叫流上的 toString() 得到的 java.io.DataInputStream@1d057a39)。
在此版本中,長 LongString 例項現在預設保留為 LongString 例項。您可以透過使用 getBytes[]、toString() 或 getStream() 方法訪問內容。大型傳入的 LongString 現在在輸出時也正確“轉換”。
有關更多資訊,請參閱訊息屬性轉換器。
RabbitAdmin 更改
宣告失敗
以前,ignoreDeclarationFailures 標誌僅對通道上的 IOException(例如不匹配的引數)生效。它現在對任何異常(例如 TimeoutException)生效。此外,每當宣告失敗時,都會發佈一個 DeclarationExceptionEvent。RabbitAdmin 的最後一個宣告事件也作為屬性 lastDeclarationExceptionEvent 提供。有關更多資訊,請參閱配置 Broker。
@RabbitListener 的更改
每個 Bean 的多個容器
當您使用 Java 8 或更高版本時,現在可以向 @Bean 類或其方法新增多個 @RabbitListener 註解。當使用 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 連線工廠
已新增一個新的 getter 以提供對底層工廠的訪問。例如,您可以使用此 getter 新增自定義連線屬性。有關更多資訊,請參閱新增自定義客戶端連線屬性。
通道快取
預設通道快取大小已從 1 增加到 25。有關更多資訊,請參閱連線和資源管理。
此外,SimpleMessageListenerContainer 不再將快取大小調整為至少與 concurrentConsumers 數量一樣大 — 這在容器消費者通道從未快取的情況下是多餘的。
Java 反序列化
現在,在使用 Java 反序列化時,您可以配置允許的類的“允許列表”。如果您接受來自不受信任源的帶有序列化 Java 物件的郵件,則應考慮建立允許列表。有關更多資訊,請參閱 amqp/message-converters.adoc#java-deserialization[Java 反序列化]。
JSON MessageConverter
JSON 訊息轉換器的改進現在允許消費訊息頭中沒有型別資訊的郵件。有關更多資訊,請參閱註解方法的郵件轉換和Jackson2JsonMessageConverter。