1.4 版本相對於 1.3 的變更
@RabbitListener
註解
POJO 監聽器可以透過 @RabbitListener
進行註解,並透過 @EnableRabbit
或 <rabbit:annotation-driven />
啟用。此功能需要 Spring Framework 4.1。更多資訊請參閱註解驅動的監聽器端點。
已新增 RabbitMessagingTemplate
新的 RabbitMessagingTemplate
允許您使用 spring-messaging
的 Message
例項與 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
屬性(PERSISTENT
或 NON_PERSISTENT
,預設為 PERSISTENT
)。以前,所有 Log4j 訊息都是 PERSISTENT
。
該 appender 還支援在傳送前修改 Message
—— 例如,允許新增自定義頭部。子類應該重寫 postProcessMessageBeforeSend()
方法。
監聽器佇列
現在,監聽器容器預設在啟動時重新宣告任何缺失的佇列。已向 <rabbit:listener-container>
添加了一個新的 auto-declare
屬性來阻止這些重新宣告。參見auto-delete
佇列。
RabbitTemplate
:mandatory
和 connectionFactorySelector
表示式
已向 RabbitTemplate
添加了 mandatoryExpression
、sendConnectionFactorySelectorExpression
和 receiveConnectionFactorySelectorExpression
這些 SpEL 表示式屬性。當使用 ReturnCallback
時,mandatoryExpression
用於針對每個請求訊息評估 mandatory
布林值。參見關聯釋出者確認與返回。當提供了 AbstractRoutingConnectionFactory
時,sendConnectionFactorySelectorExpression
和 receiveConnectionFactorySelectorExpression
用於在每次 AMQP 協議互動操作時確定目標 ConnectionFactory
的 lookupKey
。參見路由連線工廠。
監聽器與路由連線工廠
您可以配置一個帶有路由連線工廠的 SimpleMessageListenerContainer
,以便根據佇列名稱選擇連線。參見路由連線工廠。
RabbitTemplate
:RecoveryCallback
選項
已新增 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
。更多資訊請參閱訊息轉換器。