1.5 版以來 1.4 的變更

spring-erlang 不再支援

發行版本中不再包含 spring-erlang jar 檔。請改用RabbitMQ REST API

CachingConnectionFactory 變更

CachingConnectionFactory 中的空白 Addresses 屬性

先前,如果連線 Factory 設定了主機和埠,但同時也為 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,以決定轉換為 String 而不是 DataInputStreamLongString 最大長度。轉換器有一個替代建構子,它將該值作為限制。先前,此限制硬式編碼為 1024 位元組。(在 1.4.4 中也可用)。

@RabbitListener 改善

@RabbitListener@QueueBinding

bindings 屬性已新增至 @RabbitListener 註解,與 queues 屬性互斥,以允許指定 queue、其 exchangebinding,以便由 Broker 上的 RabbitAdmin 宣告。

@SendTo 中的 SpEL

@RabbitListener 的預設回覆位址 (@SendTo) 現在可以是 SpEL 運算式。

透過屬性的多個佇列名稱

您現在可以使用 SpEL 和屬性預留位置的組合,為監聽器指定多個佇列。

請參閱 註解驅動的監聽器端點 以取得更多資訊。

自動交換器、佇列和綁定宣告

您現在可以宣告定義這些實體的集合的 Bean,並且 RabbitAdmin 會將內容新增至連線建立時宣告的實體清單。請參閱 宣告交換器、佇列和綁定的集合 以取得更多資訊。

RabbitTemplate 變更

新增 reply-address

reply-address 屬性已新增至 <rabbit-template> 元件,作為 reply-queue 的替代方案。請參閱 請求/回覆訊息傳遞 以取得更多資訊。(在 1.4.4 中也以 RabbitTemplate 上的 setter 形式提供)。

封鎖 receive 方法

RabbitTemplate 現在支援在 receiveconvertAndReceive 方法中封鎖。請參閱 輪詢消費者 以取得更多資訊。

sendAndReceive 方法的強制性

當在使用 sendAndReceiveconvertSendAndReceive 方法時設定 mandatory 旗標時,如果無法傳遞請求訊息,則呼叫執行緒會擲回 AmqpMessageReturnedException。請參閱 回覆逾時 以取得更多資訊。

不正確的回覆監聽器設定

當使用具名回覆佇列時,框架會嘗試驗證回覆監聽器容器的正確設定。

請參閱 回覆監聽器容器 以取得更多資訊。

新增 RabbitManagementTemplate

引入了 RabbitManagementTemplate,以使用 RabbitMQ Broker 的 管理外掛程式 提供的 REST API 來監控和設定 RabbitMQ Broker。請參閱 [management-rest-api] 以取得更多資訊。

監聽器容器 Bean 名稱 (XML)

已移除 <listener-container/> 元素上的 id 屬性。從此版本開始,僅使用 <listener/> 子元素上的 id 來命名為每個監聽器元素建立的監聽器容器 Bean。

套用一般的 Spring Bean 名稱覆寫。如果稍後解析的 <listener/> 與現有 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 啟動復原。請參閱 訊息監聽器容器設定 以取得更多資訊。

通道關閉記錄

引入了一種機制來控制通道關閉的記錄層級。請參閱 通道關閉記錄

應用程式事件

當消費者失敗時,SimpleMessageListenerContainer 現在會發出應用程式事件。請參閱 消費者事件 以取得更多資訊。

消費者標籤設定

先前,非同步消費者的消費者標籤是由 Broker 產生。在此版本中,現在可以為監聽器容器提供命名策略。請參閱 消費者標籤

使用 MessageListenerAdapter

MessageListenerAdapter 現在支援佇列名稱 (或消費者標籤) 到方法名稱的對應,以根據接收訊息的佇列來決定要呼叫的委派方法。

新增 LocalizedQueueConnectionFactory

LocalizedQueueConnectionFactory 是一個新的連線 Factory,它連線到叢集中鏡像佇列實際駐留的節點。

匿名佇列命名

從 1.5.3 版開始,您現在可以控制 AnonymousQueue 名稱的產生方式。請參閱 AnonymousQueue 以取得更多資訊。