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 版本引入了 missingQueuesFatal 属性在 SimpleMessageListenerContainer 上。该属性现已可在监听器容器命名空间元素中使用。参见 消息监听器容器配置。
RabbitTemplateConfirmCallback接口
此接口上的 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。
附加程序还支持在发送前修改 Message —— 例如,允许添加自定义头信息。
子类应重写 postProcessMessageBeforeSend()。
监听器队列
监听器容器现在默认在启动时重新声明任何缺失的队列。<rabbit:listener-container> 中新增了一个 auto-declare 属性,以防止这些重新声明。参见 auto-delete 队列。
RabbitTemplate: mandatory和connectionFactorySelector表达式
已向 RabbitTemplate 添加了 mandatoryExpression、sendConnectionFactorySelectorExpression 和 receiveConnectionFactorySelectorExpression 这三个 SpEL 表达式属性。mandatoryExpression 用于在使用 ReturnCallback 时,将每个请求消息的 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 块已不再可达,需要将其移至捕获所有异常的通用 AmqpException catch 块之前。
RabbitMQ 3.4 兼容性
Spring AMQP 现已兼容 RabbitMQ 3.4,包括直接回复(direct reply-to)功能。
有关更多信息,请参阅 兼容性 和 RabbitMQ 直接回复。
ContentTypeDelegatingMessageConverter添加
已引入 ContentTypeDelegatingMessageConverter 以根据 MessageProperties 中的 contentType 属性选择要使用的 MessageConverter。消息转换器 了解更多信息。