1.4 相较于 1.3 的更改

@RabbitListener 注解

POJO 监听器可以使用 @RabbitListener 注解,由 @EnableRabbit<rabbit:annotation-driven /> 启用。此功能需要 Spring Framework 4.1。有关更多信息,请参阅基于注解的监听器端点

添加了 RabbitMessagingTemplate

新的 RabbitMessagingTemplate 允许您使用 spring-messagingMessage 实例与 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 属性(PERSISTENTNON_PERSISTENT,默认值:PERSISTENT)。以前,所有 log4j 消息都是 PERSISTENT

附加程序还支持在发送之前修改 Message — 例如,允许添加自定义标头。子类应重写 postProcessMessageBeforeSend()

监听器队列

现在,监听器容器在启动时默认情况下会重新声明任何缺少的队列。已向 <rabbit:listener-container> 添加了一个新的 auto-declare 属性以防止这些重新声明。请参阅auto-delete 队列

RabbitTemplatemandatoryconnectionFactorySelector 表达式

已将 mandatoryExpressionsendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpression SpEL 表达式属性添加到 RabbitTemplate。当使用 ReturnCallback 时,mandatoryExpression 用于针对每个请求消息评估 mandatory 布尔值。请参阅相关发布者确认和返回。当提供 AbstractRoutingConnectionFactory 时,sendConnectionFactorySelectorExpressionreceiveConnectionFactorySelectorExpression 用于在运行时确定每个 AMQP 协议交互操作的目标 ConnectionFactorylookupKey。请参阅[routing-connection-factory]

监听器和路由连接工厂

您可以将 SimpleMessageListenerContainer 与路由连接工厂配置,以根据队列名称启用连接选择。请参阅[routing-connection-factory]

RabbitTemplateRecoveryCallback 选项

已添加 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。更多信息请参见 消息转换器