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

套件變更

某些類別已移至不同的套件。大多數是內部類別,不會影響使用者應用程式。兩個例外是 ChannelAwareMessageListenerRabbitListenerErrorHandler。這些介面現在位於 org.springframework.amqp.rabbit.listener.api 中。

發布者確認變更

已啟用發布者確認的通道在有未完成的確認時,不會返回快取。請參閱 相關的發布者確認與退回 以取得更多資訊。

監聽器容器工廠改進

您現在可以使用監聽器容器工廠來建立任何監聽器容器,而不僅限於用於 @RabbitListener 註解或 @RabbitListenerEndpointRegistry 的容器。請參閱 使用容器工廠 以取得更多資訊。

ChannelAwareMessageListener 現在繼承自 MessageListener

Broker 事件監聽器

引入了 BrokerEventListener 以將選定的 Broker 事件發布為 ApplicationEvent 例項。請參閱 Broker 事件監聽器 以取得更多資訊。

RabbitAdmin 變更

RabbitAdmin 探索 Declarables 類型的 Bean(這是 Declarable - QueueExchangeBinding 物件的容器),並在 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 實作。

請參閱 訊息監聽器與非同步案例 以取得更多資訊。