2.1 版自 2.0 版以來的變更
AMQP 用戶端程式庫
Spring AMQP 現在使用由 RabbitMQ 團隊提供的 amqp-client
程式庫的 5.4.x 版本。此用戶端預設已設定自動恢復功能。請參閱 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
中。
發布者確認變更
已啟用發布者確認的通道在有未完成的確認時,不會返回快取。請參閱 相關的發布者確認與退回 以取得更多資訊。
監聽器容器工廠改進
您現在可以使用監聽器容器工廠來建立任何監聽器容器,而不僅限於用於 @RabbitListener
註解或 @RabbitListenerEndpointRegistry
的容器。請參閱 使用容器工廠 以取得更多資訊。
ChannelAwareMessageListener
現在繼承自 MessageListener
。
Broker 事件監聽器
引入了 BrokerEventListener
以將選定的 Broker 事件發布為 ApplicationEvent
例項。請參閱 Broker 事件監聽器 以取得更多資訊。
RabbitAdmin 變更
RabbitAdmin
探索 Declarables
類型的 Bean(這是 Declarable
- Queue
、Exchange
和 Binding
物件的容器),並在 Broker 上宣告包含的物件。不鼓勵使用者使用宣告 <Collection<Queue>>
(及其他)的舊機制,而應改用 Declarables
Bean。預設情況下,舊機制已停用。請參閱 宣告交換器、佇列與綁定的集合 以取得更多資訊。
AnonymousQueue
例項現在預設以 x-queue-master-locator
設定為 client-local
宣告,以確保佇列在應用程式連線的節點上建立。請參閱 設定 Broker 以取得更多資訊。
RabbitTemplate 變更
您現在可以使用 noLocalReplyConsumer
選項設定 RabbitTemplate
,以控制 sendAndReceive()
操作中回覆消費者的 noLocal
旗標。請參閱 請求/回覆訊息傳遞 以取得更多資訊。
發布者確認的 CorrelationData
現在具有 ListenableFuture
,您可以使用它來取得確認,而無需使用回呼。當啟用退回和確認時,如果提供相關資料,則會以退回的訊息填入相關資料。請參閱 相關的發布者確認與退回 以取得更多資訊。
現在提供了一個名為 replyTimedOut
的方法,用於通知子類別回覆已逾時,以便進行任何狀態清除。請參閱 回覆逾時 以取得更多資訊。
您現在可以指定一個 ErrorHandler
,當使用具有 DirectReplyToMessageListenerContainer
(預設值)的請求/回覆時,若在傳遞回覆時發生例外狀況(例如,延遲回覆),則會調用該處理常式。請參閱 RabbitTemplate
上的 setReplyErrorHandler
。(自 2.0.11 版起亦提供)。
訊息轉換
我們引入了一個新的 Jackson2XmlMessageConverter
,以支援從 XML 格式轉換訊息以及轉換為 XML 格式訊息。請參閱 Jackson2XmlMessageConverter
以取得更多資訊。
管理 REST API
現在已棄用 RabbitManagementTemplate
,建議直接使用 com.rabbitmq.http.client.Client
(或 com.rabbitmq.http.client.ReactorNettyClient
)。請參閱 管理 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
。
監聽器容器變更
如果存在 x-death
標頭,預設的 ConditionalRejectingErrorHandler
現在會完全捨棄導致嚴重錯誤的訊息。請參閱 例外處理 以取得更多資訊。
立即重新排隊
引入了新的 ImmediateRequeueAmqpException
,以通知監聽器容器訊息必須重新排隊。為了使用此功能,新增了新的 ImmediateRequeueMessageRecoverer
實作。
請參閱 訊息監聽器與非同步案例 以取得更多資訊。