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
。
该追加器还支持在发送前修改 Message
,例如,允许添加自定义头部。子类应重写 postProcessMessageBeforeSend()
。
监听器队列
默认情况下,监听器容器现在会在启动期间重新声明任何缺失的队列。<rabbit:listener-container>
中添加了一个新的 auto-declare
属性,以防止这些重新声明。请参阅 auto-delete
队列。
RabbitTemplate
:mandatory
和 connectionFactorySelector
表达式
mandatoryExpression
、sendConnectionFactorySelectorExpression
和 receiveConnectionFactorySelectorExpression
SpEL 表达式属性已添加到 RabbitTemplate
中。当使用 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
块不再可达,需要移到捕获所有 AmqpException
的 catch
块上方。
RabbitMQ 3.4 兼容性
Spring AMQP 现在与 RabbitMQ 3.4 兼容,包括直接回复。有关更多信息,请参阅 兼容性 和 RabbitMQ 直接回复。
ContentTypeDelegatingMessageConverter
已添加
引入了 ContentTypeDelegatingMessageConverter
,用于根据 MessageProperties
中的 contentType
属性选择要使用的 MessageConverter
。有关更多信息,请参阅 消息转换器。