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
上设置该属性。请参阅 配置底层客户端连接工厂。
日志附加器
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
属性。详情请参阅 自动删除队列。
RabbitTemplate
: mandatory
和 connectionFactorySelector
表达式
RabbitTemplate
中添加了 mandatoryExpression
、sendConnectionFactorySelectorExpression
和 receiveConnectionFactorySelectorExpression
SpEL 表达式的属性。mandatoryExpression
用于在使用 ReturnCallback
时,针对每个请求消息评估一个 mandatory
布尔值。请参阅 相关发布者确认和返回。sendConnectionFactorySelectorExpression
和 receiveConnectionFactorySelectorExpression
在提供 AbstractRoutingConnectionFactory
时使用,用于在每次 AMQP 协议交互操作时确定目标 ConnectionFactory
的 lookupKey
。请参阅 路由连接工厂。
监听器与路由连接工厂
你可以配置一个 SimpleMessageListenerContainer
与一个路由连接工厂(routing connection factory),以便根据队列名称选择连接。详细信息请参阅 路由连接工厂。
RabbitTemplate
: RecoveryCallback
选项
recoveryCallback
属性已被添加,用于 retryTemplate.execute()
中。请参阅 添加重试功能。
MessageConversionException
变更
此异常现在是 AmqpException
的子类。考虑以下代码:
try {
template.convertAndSend("thing1", "thing2", "cat");
}
catch (AmqpException e) {
...
}
catch (MessageConversionException e) {
...
}
第二个 catch
块不再可达,需要将其移动到通用的 AmqpException
catch 块之前。
RabbitMQ 3.4 兼容性
Spring AMQP 现已兼容 RabbitMQ 3.4,包括直接回复功能。更多信息请参见兼容性和RabbitMQ 直接回复。
添加了 ContentTypeDelegatingMessageConverter
引入了 ContentTypeDelegatingMessageConverter
,用于根据 MessageProperties
中的 contentType
属性选择要使用的 MessageConverter
。更多信息请参阅 消息转换器。