1.4 版本相對於 1.3 的變更

@RabbitListener 註解

POJO 監聽器可以透過 @RabbitListener 進行註解,並透過 @EnableRabbit<rabbit:annotation-driven /> 啟用。此功能需要 Spring Framework 4.1。更多資訊請參閱註解驅動的監聽器端點

已新增 RabbitMessagingTemplate

新的 RabbitMessagingTemplate 允許您使用 spring-messagingMessage 例項與 RabbitMQ 進行互動。在內部,它使用 RabbitTemplate,您可以像往常一樣配置它。此功能需要 Spring Framework 4.1。更多資訊請參閱訊息整合

監聽器容器 missingQueuesFatal 屬性

1.3.5 版本在 SimpleMessageListenerContainer 上引入了 missingQueuesFatal 屬性。現在該屬性也可用於監聽器容器的名稱空間元素。參見訊息監聽器容器配置

RabbitTemplate ConfirmCallback 介面

此介面上的 confirm 方法添加了一個名為 cause 的附加引數。如果可用,此引數包含否定確認(nack)的原因。參見關聯釋出者確認與返回

已新增 RabbitConnectionFactoryBean

RabbitConnectionFactoryBean 建立 CachingConnectionFactory 所使用的底層 RabbitMQ ConnectionFactory。這使得可以使用 Spring 的依賴注入來配置 SSL 選項。參見配置底層客戶端連線工廠

使用 CachingConnectionFactory

現在可以在 CachingConnectionFactory 上將 connectionTimeout 設定為屬性或名稱空間中的屬性。它將此屬性設定到底層 RabbitMQ ConnectionFactory 上。參見配置底層客戶端連線工廠

日誌 Appender

已引入 Logback 的 org.springframework.amqp.rabbit.logback.AmqpAppender。它提供了與 org.springframework.amqp.rabbit.log4j.AmqpAppender 類似的選項。更多資訊請參閱這些類的 JavaDoc。

Log4j 的 AmqpAppender 現在支援 deliveryMode 屬性(PERSISTENTNON_PERSISTENT,預設為 PERSISTENT)。以前,所有 Log4j 訊息都是 PERSISTENT

該 appender 還支援在傳送前修改 Message —— 例如,允許新增自定義頭部。子類應該重寫 postProcessMessageBeforeSend() 方法。

監聽器佇列

現在,監聽器容器預設在啟動時重新宣告任何缺失的佇列。已向 <rabbit:listener-container> 添加了一個新的 auto-declare 屬性來阻止這些重新宣告。參見auto-delete 佇列

RabbitTemplatemandatoryconnectionFactorySelector 表示式

已向 RabbitTemplate 添加了 mandatoryExpressionsendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpression 這些 SpEL 表示式屬性。當使用 ReturnCallback 時,mandatoryExpression 用於針對每個請求訊息評估 mandatory 布林值。參見關聯釋出者確認與返回。當提供了 AbstractRoutingConnectionFactory 時,sendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpression 用於在每次 AMQP 協議互動操作時確定目標 ConnectionFactorylookupKey。參見路由連線工廠

監聽器與路由連線工廠

您可以配置一個帶有路由連線工廠的 SimpleMessageListenerContainer,以便根據佇列名稱選擇連線。參見路由連線工廠

RabbitTemplateRecoveryCallback 選項

已新增 recoveryCallback 屬性用於 retryTemplate.execute() 方法。參見新增重試功能

MessageConversionException 變更

此異常現在是 AmqpException 的子類。請考慮以下程式碼

try {
    template.convertAndSend("thing1", "thing2", "cat");
}
catch (AmqpException e) {
	...
}
catch (MessageConversionException e) {
	...
}

第二個 catch 塊將不再可達,需要將其移動到 catch-all 的 AmqpException catch 塊之上。

RabbitMQ 3.4 相容性

Spring AMQP 現在與 RabbitMQ 3.4 相容,包括 direct reply-to。更多資訊請參閱相容性RabbitMQ Direct reply-to

已新增 ContentTypeDelegatingMessageConverter

已引入 ContentTypeDelegatingMessageConverter,用於根據 MessageProperties 中的 contentType 屬性選擇要使用的 MessageConverter。更多資訊請參閱訊息轉換器