1.4 自 1.3 以来的变更
@RabbitListener 注解
POJO listener 可以用 @RabbitListener 注解,通过 @EnableRabbit 或 <rabbit:annotation-driven /> 启用。该特性需要 Spring Framework 4.1。更多信息参见注解驱动的 Listener 端点。
新增 RabbitMessagingTemplate
新的 RabbitMessagingTemplate 让你能够使用 spring-messaging 的 Message 实例与 RabbitMQ 交互。其内部使用 RabbitTemplate,你可以像往常一样配置它。该特性需要 Spring Framework 4.1。更多信息参见消息集成。
Listener 容器 missingQueuesFatal 属性
1.3.5 在 SimpleMessageListenerContainer 上引入了 missingQueuesFatal 属性。现在它也可在 listener 容器命名空间元素上使用。参见消息 Listener 容器配置。
RabbitTemplate ConfirmCallback 接口
该接口上的 confirm 方法新增了一个名为 cause 的参数。在可用时,该参数包含否定确认(nack)的原因。参见关联的 Publisher Confirm 与 Return。
新增 RabbitConnectionFactoryBean
RabbitConnectionFactoryBean 创建 CachingConnectionFactory 所使用的底层 RabbitMQ ConnectionFactory。这使得可以使用 Spring 的依赖注入来配置 SSL 选项。参见配置底层 Client 连接工厂。
使用 CachingConnectionFactory
CachingConnectionFactory 现在允许将 connectionTimeout 设置为属性或命名空间中的属性。它会在底层 RabbitMQ ConnectionFactory 上设置该属性。参见配置底层 Client 连接工厂。
日志 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——例如允许添加自定义 header。子类应重写 postProcessMessageBeforeSend()。
Listener 队列
listener 容器现在默认在启动期间重新声明任何缺失的队列。为防止这些重新声明,<rabbit:listener-container> 新增了 auto-declare 属性。参见auto-delete 队列。
RabbitTemplate:mandatory 与 connectionFactorySelector 表达式
RabbitTemplate 新增了 mandatoryExpression、sendConnectionFactorySelectorExpression 和 receiveConnectionFactorySelectorExpression 这几个 SpEL 表达式属性。当使用 ReturnCallback 时,mandatoryExpression 用于针对每条请求消息求值出一个 mandatory 布尔值。参见关联的 Publisher Confirm 与 Return。当提供了 AbstractRoutingConnectionFactory 时,sendConnectionFactorySelectorExpression 和 receiveConnectionFactorySelectorExpression 用于在每次 AMQP 协议交互操作时,于运行时确定目标 ConnectionFactory 的 lookupKey。参见路由连接工厂。
Listener 与路由连接工厂
你可以为 SimpleMessageListenerContainer 配置路由连接工厂,以根据队列名称选择连接。参见路由连接工厂。
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,包括 direct reply-to。更多信息参见兼容性和RabbitMQ Direct reply-to。
新增 ContentTypeDelegatingMessageConverter
引入了 ContentTypeDelegatingMessageConverter,用于根据 MessageProperties 中的 contentType 属性选择要使用的 MessageConverter。更多信息参见消息转换器。