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。有关更多信息,请参阅消息传递集成。
Listener Container 的 missingQueuesFatal
属性
1.3.5 在 SimpleMessageListenerContainer
上引入了 missingQueuesFatal
属性。现在可以在监听器容器命名空间元素上使用它。请参阅消息监听器容器配置。
RabbitTemplate 的 ConfirmCallback
接口
此接口上的 confirm
方法有一个名为 cause
的附加参数。如果可用,此参数包含否定确认 (nack) 的原因。请参阅相关发布者确认和返回。
添加了 RabbitConnectionFactoryBean
RabbitConnectionFactoryBean
创建 CachingConnectionFactory
使用的基础 RabbitMQ ConnectionFactory
。这使得可以使用 Spring 的依赖注入来配置 SSL 选项。请参阅[connection-factory]。
使用 CachingConnectionFactory
CachingConnectionFactory
现在允许将 connectionTimeout
设置为属性或命名空间中的属性。它在底层的 RabbitMQ ConnectionFactory
上设置该属性。请参阅[connection-factory]。
日志附加程序
已引入 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
。请参阅[routing-connection-factory]。
监听器和路由连接工厂
您可以将 SimpleMessageListenerContainer
与路由连接工厂配置,以根据队列名称启用连接选择。请参阅[routing-connection-factory]。
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,包括直接回复。更多信息请参见 兼容性 和 RabbitMQ 直接回复。
添加了 ContentTypeDelegatingMessageConverter
引入了 ContentTypeDelegatingMessageConverter
用于根据 MessageProperties
中的 contentType
属性选择要使用的 MessageConverter
。更多信息请参见 消息转换器。