1.5 版本相對於 1.4 版本的變化

spring-erlang 不再支援

spring-erlang jar 不再包含在發行版中。請使用 RabbitMQ REST API 代替。

CachingConnectionFactory 的變化

CachingConnectionFactory 中的空地址屬性

此前,如果連線工廠配置了主機和埠,但 addresses 引數也提供了空字串,則主機和埠會被忽略。現在,空 addresses 字串的處理方式與 null 相同,會使用主機和埠。

URI 建構函式

CachingConnectionFactory 新增了一個帶 URI 引數的建構函式,用於配置 broker 連線。

連線重置

新增了一個名為 resetConnection() 的方法,允許使用者重置連線(或多個連線)。例如,在故障轉移到備用 broker 後,可以使用此方法重新連線到主 broker。這影響進行中的操作。現有的 destroy() 方法功能完全相同,但新方法的名稱不那麼令人望而卻步。

控制容器佇列宣告行為的屬性

監聽器容器消費者啟動時,會嘗試被動宣告佇列,以確保它們在 broker 上可用。此前,如果這些宣告失敗(例如,因為佇列不存在)或高可用 (HA) 佇列正在移動時,重試邏輯被固定為三次嘗試,間隔五秒。如果佇列仍然不存在,行為由 missingQueuesFatal 屬性控制(預設為 true)。此外,對於配置為監聽多個佇列的容器,如果只有一部分佇列可用,消費者會以固定的 60 秒間隔重試缺失的佇列。

declarationRetriesfailedDeclarationRetryIntervalretryDeclarationInterval 屬性現在可以配置了。更多資訊請參見 訊息監聽器容器配置

類包變更

RabbitGatewaySupport 類已從 o.s.amqp.rabbit.core.support 移動到 o.s.amqp.rabbit.core

DefaultMessagePropertiesConverter 的變化

現在可以配置 DefaultMessagePropertiesConverter,以確定 LongString 轉換為 String 而不是 DataInputStream 的最大長度。轉換器提供了一個接受該值作為限制的替代建構函式。此前,此限制被硬編碼為 1024 位元組。(此功能在 1.4.4 版本中也已提供)。

@RabbitListener 改進

@QueueBinding 用於 @RabbitListener

bindings 屬性已新增到 @RabbitListener 註解中,與 queues 屬性互斥,用於指定 queue、其 exchangebinding,以便由 RabbitAdmin 在 Broker 上宣告。

@SendTo 中的 SpEL

@RabbitListener 的預設回覆地址(@SendTo)現在可以是 SpEL 表示式。

透過屬性指定多個佇列名稱

現在可以使用 SpEL 和屬性佔位符的組合為監聽器指定多個佇列。

參見 註解驅動的監聽器端點 瞭解更多資訊。

Exchange、Queue 和 Binding 的自動宣告

現在可以宣告定義這些實體集合的 bean,並且 RabbitAdmin 在建立連線時會將這些內容新增到它宣告的實體列表中。更多資訊請參見 宣告 Exchange、Queue 和 Binding 集合

RabbitTemplate 的變化

新增 reply-address

reply-address 屬性已新增到 <rabbit-template> 元件中,作為 reply-queue 的替代項。更多資訊請參見 請求/回覆訊息。(在 1.4.4 版本中也作為 RabbitTemplate 的 setter 提供)。

阻塞 receive 方法

RabbitTemplate 現在支援在 receiveconvertAndReceive 方法中進行阻塞。更多資訊請參見 輪詢消費者

sendAndReceive 方法中的 Mandatory 標誌

在使用 sendAndReceiveconvertSendAndReceive 方法時設定 mandatory 標誌後,如果請求訊息無法送達,呼叫執行緒將丟擲 AmqpMessageReturnedException。更多資訊請參見 回覆超時

不正確的回覆監聽器配置

框架在使用命名回覆佇列時,會嘗試驗證回覆監聽器容器的配置是否正確。

參見 回覆監聽器容器 瞭解更多資訊。

新增 RabbitManagementTemplate

引入了 RabbitManagementTemplate,用於透過 RabbitMQ Broker 的 管理外掛 提供的 REST API 來監控和配置 RabbitMQ Broker。更多資訊請參見 RabbitMQ REST API

監聽器容器 Bean 名稱 (XML)

<listener-container/> 元素上的 id 屬性已移除。從本版本開始,<listener/> 子元素上的 id 被單獨用於命名為每個 listener 元素建立的監聽器容器 bean。

會應用正常的 Spring bean 名稱覆蓋規則。如果解析到後續的 <listener/> 元素的 id 與現有 bean 的 id 相同,則新定義將覆蓋現有定義。此前,bean 名稱是由 <listener-container/><listener/> 元素的 id 屬性組合而成的。

遷移到此版本時,如果您的 <listener-container/> 元素上存在 id 屬性,請將其移除,並在子 <listener/> 元素上設定 id 屬性代替。

但是,為了支援將容器作為一組進行啟動和停止,新增了一個 group 屬性。定義此屬性時,由該元素建立的容器將被新增到名為此名稱的 bean 中,其型別為 Collection<SimpleMessageListenerContainer>。您可以遍歷此組來啟動和停止容器。

類級別的 @RabbitListener

@RabbitListener 註解現在可以應用於類級別。結合新的 @RabbitHandler 方法註解,這允許您根據 payload 型別選擇處理方法。更多資訊請參見 多方法監聽器

SimpleMessageListenerContainer:BackOff 支援

SimpleMessageListenerContainer 現在可以提供一個 BackOff 例項,用於 consumer 啟動恢復。更多資訊請參見 訊息監聽器容器配置

Channel 關閉日誌記錄

引入了一種控制 channel 關閉日誌級別 的機制。參見 記錄 Channel 關閉事件

應用事件

SimpleMessageListenerContainer 現在在消費者失敗時發出應用事件。更多資訊請參見 消費者事件

消費者標籤配置

此前,非同步消費者的消費者標籤由 broker 生成。在此版本中,現在可以向監聽器容器提供命名策略。參見 消費者標籤

使用 MessageListenerAdapter

MessageListenerAdapter 現在支援將佇列名稱(或消費者標籤)對映到方法名稱,以便根據接收訊息的佇列來確定呼叫哪個委託方法。

新增 LocalizedQueueConnectionFactory

LocalizedQueueConnectionFactory 是一種新的連線工廠,用於連線到叢集中實際駐留映象佇列的節點。

匿名佇列命名

從 1.5.3 版本開始,現在可以控制 AnonymousQueue 名稱的生成方式。更多資訊請參見 AnonymousQueue