2.1 相較 2.0 的變化

AMQP 客戶端庫

Spring AMQP 現在使用 RabbitMQ 團隊提供的 amqp-client 庫的 5.4.x 版本。該客戶端預設配置了自動恢復。請參閱RabbitMQ 自動連線/拓撲恢復

從 4.0 版本開始,客戶端預設啟用自動恢復。雖然與此功能相容,但 Spring AMQP 有自己的恢復機制,通常不需要客戶端恢復功能。我們建議停用 amqp-client 自動恢復,以避免在代理可用但連線尚未恢復時出現 AutoRecoverConnectionNotCurrentlyOpenException 例項。從 1.7.1 版本開始,除非您明確建立自己的 RabbitMQ 連線工廠並將其提供給 CachingConnectionFactory,否則 Spring AMQP 會停用它。由 RabbitConnectionFactoryBean 建立的 RabbitMQ ConnectionFactory 例項也預設停用該選項。

包變更

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

釋出者確認變更

在存在未完成的確認時,已為釋出者確認啟用的通道不會返回到快取中。有關更多資訊,請參閱關聯的釋出者確認和返回

監聽器容器工廠改進

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

ChannelAwareMessageListener 現在繼承自 MessageListener

代理事件監聽器

引入了 BrokerEventListener 以將選定的代理事件作為 ApplicationEvent 例項釋出。有關更多資訊,請參閱代理事件監聽器

RabbitAdmin 變更

RabbitAdmin 發現 Declarables 型別的 bean(這是一個包含 Declarable - QueueExchangeBinding 物件的容器),並在代理上宣告包含的物件。不建議使用者使用宣告 <Collection<Queue>>(及其他)的舊機制,而應使用 Declarables bean。預設情況下,舊機制是停用的。有關更多資訊,請參閱宣告交換、佇列和繫結的集合

AnonymousQueue 例項現在預設使用 x-queue-master-locator 設定為 client-local 進行宣告,以確保佇列在應用程式連線到的節點上建立。有關更多資訊,請參閱配置代理

RabbitTemplate 變更

您現在可以使用 noLocalReplyConsumer 選項配置 RabbitTemplate,以控制 sendAndReceive() 操作中回覆消費者的 noLocal 標誌。有關更多資訊,請參閱請求/回覆訊息傳遞

用於釋出者確認的 CorrelationData 現在有一個 ListenableFuture,您可以使用它來獲取確認,而不是使用回撥。當啟用返回和確認時,如果提供了關聯資料,則會填充返回的訊息。有關更多資訊,請參閱關聯的釋出者確認和返回

現在提供了一個名為 replyTimedOut 的方法,用於通知子類回覆已超時,從而允許進行任何狀態清理。有關更多資訊,請參閱回覆超時

當使用 DirectReplyToMessageListenerContainer(預設)進行請求/回覆時,如果回覆傳遞時發生異常(例如,延遲迴復),您現在可以指定一個 ErrorHandler 來呼叫。請參閱 RabbitTemplate 上的 setReplyErrorHandler。(也從 2.0.11 開始)。

訊息轉換

我們引入了一個新的 Jackson2XmlMessageConverter 來支援將訊息轉換為 XML 格式,以及從 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

偵聽器容器的更改

如果存在 x-death 頭部,預設的 ConditionalRejectingErrorHandler 現在會完全丟棄導致致命錯誤的訊息。有關更多資訊,請參閱異常處理

立即重新入隊

引入了一個新的 ImmediateRequeueAmqpException,用於通知監聽器容器訊息必須重新入隊。為了使用此功能,添加了一個新的 ImmediateRequeueMessageRecoverer 實現。

有關更多資訊,請參閱訊息監聽器和非同步情況

© . This site is unofficial and not affiliated with VMware.