此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring AMQP 4.0.2spring-doc.cadn.net.cn

1.4 版本相对于 1.3 版本的变更

@RabbitListener注解

POJO 监听器可以使用 @RabbitListener 注解,通过 @EnableRabbit<rabbit:annotation-driven /> 启用。此功能需要 Spring Framework 4.1 版本。有关更多信息,请参阅 注解驱动的监听器端点spring-doc.cadn.net.cn

RabbitMessagingTemplate添加

一个新的 RabbitMessagingTemplate 允许您通过使用 spring-messaging Message 实例与 RabbitMQ 进行交互。
在内部,它使用 RabbitTemplate,您可以像平常一样对其进行配置。
此功能需要 Spring Framework 4.1。
有关更多信息,请参阅 消息集成spring-doc.cadn.net.cn

监听器容器missingQueuesFatal属性

1.3.5 版本引入了 missingQueuesFatal 属性在 SimpleMessageListenerContainer 上。该属性现已可在监听器容器命名空间元素中使用。参见 消息监听器容器配置spring-doc.cadn.net.cn

RabbitTemplateConfirmCallback接口

此接口上的 confirm 方法额外包含一个名为 cause 的参数。当可用时,该参数将包含负确认(nack)的原因。参见 关联的发布者确认与返回spring-doc.cadn.net.cn

RabbitConnectionFactoryBean添加

RabbitConnectionFactoryBean 创建了由 CachingConnectionFactory 使用的底层 RabbitMQ ConnectionFactory。这使得可以利用 Spring 的依赖注入来配置 SSL 选项。请参阅 配置底层客户端连接工厂spring-doc.cadn.net.cn

使用CachingConnectionFactory

现在,CachingConnectionFactory 允许将 connectionTimeout 设置为属性或命名空间中的属性。
它会将该属性设置到底层的 RabbitMQ ConnectionFactory 上。
请参阅 配置底层客户端连接工厂spring-doc.cadn.net.cn

日志追加器

Logback org.springframework.amqp.rabbit.logback.AmqpAppender 版本已引入。
它提供了与 org.springframework.amqp.rabbit.log4j.AmqpAppender 类似的选项。
有关更多信息,请参阅这些类的 JavaDoc 文档。spring-doc.cadn.net.cn

Log4j AmqpAppender 现在支持 deliveryMode 属性(PERSISTENTNON_PERSISTENT,默认值为 PERSISTENT)。
此前,所有 Log4j 日志消息均被 PERSISTENTspring-doc.cadn.net.cn

附加程序还支持在发送前修改 Message —— 例如,允许添加自定义头信息。
子类应重写 postProcessMessageBeforeSend()spring-doc.cadn.net.cn

监听器队列

监听器容器现在默认在启动时重新声明任何缺失的队列。<rabbit:listener-container> 中新增了一个 auto-declare 属性,以防止这些重新声明。参见 auto-delete 队列spring-doc.cadn.net.cn

RabbitTemplate: mandatoryconnectionFactorySelector表达式

已向 RabbitTemplate 添加了 mandatoryExpressionsendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpression 这三个 SpEL 表达式属性。mandatoryExpression 用于在使用 ReturnCallback 时,将每个请求消息的 mandatory 布尔值与之进行比较评估。请参阅 关联发布者确认和返回。当提供 AbstractRoutingConnectionFactory 时,sendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpression 会被用到,以在每次 AMQP 协议交互操作期间动态确定目标 ConnectionFactorylookupKey。请参阅 路由连接工厂spring-doc.cadn.net.cn

监听器和路由连接工厂

您可以配置一个 SimpleMessageListenerContainer,并结合路由连接工厂,以实现根据队列名称进行连接选择。请参阅 路由连接工厂spring-doc.cadn.net.cn

RabbitTemplate: RecoveryCallback选项

属性 recoveryCallback 已添加,用于在 retryTemplate.execute() 中使用。请参阅 添加重试功能spring-doc.cadn.net.cn

MessageConversionException变更

此异常现在是 AmqpException 的子类。考虑以下代码:spring-doc.cadn.net.cn

try {
    template.convertAndSend("thing1", "thing2", "cat");
}
catch (AmqpException e) {
	...
}
catch (MessageConversionException e) {
	...
}

第二个 catch 块已不再可达,需要将其移至捕获所有异常的通用 AmqpException catch 块之前。spring-doc.cadn.net.cn

RabbitMQ 3.4 兼容性

Spring AMQP 现已兼容 RabbitMQ 3.4,包括直接回复(direct reply-to)功能。
有关更多信息,请参阅 兼容性RabbitMQ 直接回复spring-doc.cadn.net.cn

ContentTypeDelegatingMessageConverter添加

已引入 ContentTypeDelegatingMessageConverter 以根据 MessageProperties 中的 contentType 属性选择要使用的 MessageConverter消息转换器 了解更多信息。spring-doc.cadn.net.cn