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
。更多信息请参阅消息转换器。