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 條件。
@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 日誌追加器變更
Log4J 和 Logback 的 AmqpAppender 現在支援 verifyHostname SSL 選項。
此外,這些追加器現在可以配置為不將 MDC 條目新增為頭部。已引入 addMdcAsHeaders 布林選項來配置此類行為。
追加器現在支援 SaslConfig 屬性。
有關更多資訊,請參閱 日誌子系統 AMQP 追加器。
MessageListenerAdapter 變更
MessageListenerAdapter 現在提供了一個新的 buildListenerArguments(Object, Channel, Message) 方法來構建一個引數陣列,以傳遞給目標監聽器,而舊方法已被棄用。有關更多資訊,請參閱 MessageListenerAdapter。
[[exchange/queue-declaration-changes]] == 交換/佇列宣告變更
ExchangeBuilder 和 QueueBuilder 流式 API 用於透過 RabbitAdmin 宣告 Exchange 和 Queue 物件,現在支援“知名”引數。有關更多資訊,請參閱 佇列和交換機的 Builder API。
RabbitAdmin 有一個新屬性 explicitDeclarationsOnly。有關更多資訊,請參閱 條件宣告。
連線工廠的更改
CachingConnectionFactory 有一個新屬性 shuffleAddresses。當提供經紀節點地址列表時,在建立連線之前,該列表將被打亂,以便嘗試連線的順序是隨機的。有關更多資訊,請參閱 連線到叢集。
使用釋出者確認和返回時,回撥現在在連線工廠的 executor 上呼叫。這避免瞭如果在回撥中執行 Rabbit 操作,amqp-clients 庫中可能出現的死鎖。有關更多資訊,請參閱 關聯的釋出者確認和返回。
此外,釋出者確認型別現在使用 ConfirmType 列舉指定,而不是兩個互斥的 setter 方法。
當啟用 SSL 時,RabbitConnectionFactoryBean 現在預設使用 TLS 1.2。有關更多資訊,請參閱 RabbitConnectionFactoryBean 和配置 SSL。
新的 MessagePostProcessor 類
添加了 DeflaterPostProcessor 和 InflaterPostProcessor 類,分別用於在訊息內容編碼設定為 deflate 時支援壓縮和解壓縮。
其他變更
Declarables 物件(用於宣告多個佇列、交換機、繫結)現在為每種型別提供了過濾的 getter。有關更多資訊,請參閱 宣告交換機、佇列和繫結的集合。
您現在可以在 RabbitAdmin 處理宣告之前自定義每個 Declarable bean。有關更多資訊,請參閱 交換機、佇列和繫結的自動宣告。
QueueBuilder 中添加了 singleActiveConsumer() 以設定 x-single-active-consumer 佇列引數。有關更多資訊,請參閱 佇列和交換機的 Builder API。
型別為 Class<?> 的出站頭部值現在使用 getName() 而不是 toString() 進行對映。有關更多資訊,請參閱 訊息屬性轉換器。
現在支援恢復失敗的生產者建立的批次。有關更多資訊,請參閱 帶批次監聽器的重試。