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 例項也預設停用了此選項。

包變更

某些類已移至不同的包中。大多數是內部類,不影響使用者應用。兩個例外是 ChannelAwareMessageListenerRabbitListenerErrorHandler。這些介面現在位於 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 - QueueExchangeBinding 物件的容器),並在 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 實現。

請參閱 訊息監聽器和非同步情況 以獲取更多資訊。