2.1 版本相對於 2.0 版本的變更
AMQP 客戶端庫
Spring AMQP 現在使用 RabbitMQ 團隊提供的 5.4.x 版本的 amqp-client
庫。此客戶端預設配置了自動恢復。請參閱 RabbitMQ 自動連線/拓撲恢復。
自 4.0 版本起,客戶端預設啟用自動恢復。雖然與此功能相容,但 Spring AMQP 有自己的恢復機制,通常不需要客戶端的恢復功能。我們建議停用 amqp-client 的自動恢復,以避免在 broker 可用但連線尚未恢復時出現 AutoRecoverConnectionNotCurrentlyOpenException 例項。從 1.7.1 版本開始,除非您明確建立自己的 RabbitMQ 連線工廠並將其提供給 CachingConnectionFactory ,否則 Spring AMQP 會停用此功能。由 RabbitConnectionFactoryBean 建立的 RabbitMQ ConnectionFactory 例項也預設停用了此選項。 |
包變更
某些類已移至不同的包中。大多數是內部類,不影響使用者應用。兩個例外是 ChannelAwareMessageListener
和 RabbitListenerErrorHandler
。這些介面現在位於 org.springframework.amqp.rabbit.listener.api
包中。
Publisher Confirms 變更
為 publisher confirmations 啟用的 Channel 在存在未確認的訊息時不會返回到快取中。請參閱 Correlated Publisher Confirms and Returns 以獲取更多資訊。
監聽器容器工廠改進
現在您可以使用監聽器容器工廠來建立任何監聽器容器,而不僅限於與 @RabbitListener
註解或 @RabbitListenerEndpointRegistry
一起使用的容器。請參閱 使用容器工廠 以獲取更多資訊。
ChannelAwareMessageListener
現在繼承自 MessageListener
。
Broker 事件監聽器
引入了 BrokerEventListener
,用於將選定的 broker 事件作為 ApplicationEvent
例項釋出。請參閱 Broker 事件監聽器 以獲取更多資訊。
RabbitAdmin 變更
RabbitAdmin
會發現型別為 Declarables
的 bean(它是 Declarable
- Queue
、Exchange
和 Binding
物件的容器),並在 broker 上宣告包含的物件。不鼓勵使用者使用舊的宣告 <Collection<Queue>>
(及其他)的機制,而應改用 Declarables
bean。預設情況下,舊機制已停用。請參閱 宣告 Exchange、Queue 和 Binding 的集合 以獲取更多資訊。
AnonymousQueue
例項現在預設宣告時將 x-queue-master-locator
設定為 client-local
,以確保佇列在應用連線的節點上建立。請參閱 配置 Broker 以獲取更多資訊。
RabbitTemplate 變更
現在您可以為 RabbitTemplate
配置 noLocalReplyConsumer
選項,以控制 sendAndReceive()
操作中回覆消費者的 noLocal
標誌。請參閱 請求/回覆訊息 以獲取更多資訊。
用於 publisher confirmations 的 CorrelationData
現在具有 ListenableFuture
,您可以使用它來獲取確認,而不是使用回撥。當啟用 returns 和 confirmations 時,如果提供了 correlation data,則會填充返回的訊息。請參閱 Correlated Publisher Confirms and Returns 以獲取更多資訊。
現在提供了一個名為 replyTimedOut
的方法,用於通知子類回覆已超時,以便進行任何狀態清理。請參閱 回覆超時 以獲取更多資訊。
現在,在使用帶有 DirectReplyToMessageListenerContainer
(預設)的請求/回覆時,如果回覆送達時發生異常(例如,延遲迴復),您可以指定要呼叫的 ErrorHandler
。請參閱 RabbitTemplate
上的 setReplyErrorHandler
。(也從 2.0.11 版本開始)
訊息轉換
我們引入了一個新的 Jackson2XmlMessageConverter
來支援訊息在 XML 格式之間的轉換。請參閱 Jackson2XmlMessageConverter
以獲取更多資訊。
管理 REST API
RabbitManagementTemplate
現在已棄用,建議直接使用 com.rabbitmq.http.client.Client
(或 com.rabbitmq.http.client.ReactorNettyClient
)。請參閱 RabbitMQ REST API 以獲取更多資訊。
@RabbitListener
變更
現在可以為監聽器容器工廠配置 RetryTemplate
,以及可選的、在傳送回覆時使用的 RecoveryCallback
。請參閱 啟用監聽器端點註解 以獲取更多資訊。
非同步 @RabbitListener
返回
@RabbitListener
方法現在可以返回 ListenableFuture<?>
或 Mono<?>
。請參閱 非同步 @RabbitListener
返回型別 以獲取更多資訊。
連線工廠 Bean 變更
預設情況下,RabbitConnectionFactoryBean
現在會呼叫 enableHostnameVerification()
。要恢復到之前的行為,請將 enableHostnameVerification
屬性設定為 false
。
連線工廠變更
CachingConnectionFactory
現在會無條件停用底層 RabbitMQ ConnectionFactory
中的自動恢復功能,即使在建構函式中提供了預先配置的例項也是如此。雖然已經採取措施使 Spring AMQP 與自動恢復相容,但仍存在一些邊緣情況,問題依然存在。Spring AMQP 自 1.0.0 版本起就擁有自己的恢復機制,不需要使用客戶端提供的恢復功能。雖然在構建 CachingConnectionFactory
後仍然可以透過 cachingConnectionFactory.getRabbitConnectionFactory().setAutomaticRecoveryEnabled()
啟用此功能,但 **我們強烈建議您不要這樣做**。如果您在使用客戶端工廠時直接需要自動恢復連線(而不是使用 Spring AMQP 元件),我們建議您使用單獨的 RabbitMQ ConnectionFactory
。
監聽器容器變更
預設的 ConditionalRejectingErrorHandler
現在會在存在 x-death
header 時完全丟棄導致致命錯誤的訊息。請參閱 異常處理 以獲取更多資訊。
立即重新入隊
引入了一個新的 ImmediateRequeueAmqpException
來通知監聽器容器訊息需要重新入隊。為了使用此功能,添加了一個新的 ImmediateRequeueMessageRecoverer
實現。
請參閱 訊息監聽器和非同步情況 以獲取更多資訊。