跳到主要内容
版本:3.2.3

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

DeepSeek V3 中英对照 Changes in 1.4 Since 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。

appender 还支持在发送前修改 Message —— 例如,允许添加自定义头部。子类应重写 postProcessMessageBeforeSend() 方法。

监听器队列​

监听器容器现在默认在启动时会重新声明任何缺失的队列。为了防止这些重新声明,<rabbit:listener-container> 新增了一个 auto-declare 属性。详情请参阅 自动删除队列。

RabbitTemplate: mandatory 和 connectionFactorySelector 表达式​

RabbitTemplate 中添加了 mandatoryExpression、sendConnectionFactorySelectorExpression 和 receiveConnectionFactorySelectorExpression SpEL 表达式的属性。mandatoryExpression 用于在使用 ReturnCallback 时,针对每个请求消息评估一个 mandatory 布尔值。请参阅 相关发布者确认和返回。sendConnectionFactorySelectorExpression 和 receiveConnectionFactorySelectorExpression 在提供 AbstractRoutingConnectionFactory 时使用,用于在每次 AMQP 协议交互操作时确定目标 ConnectionFactory 的 lookupKey。请参阅 路由连接工厂。

监听器与路由连接工厂​

你可以配置一个 SimpleMessageListenerContainer 与一个路由连接工厂(routing connection factory),以便根据队列名称选择连接。详细信息请参阅 路由连接工厂。

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。更多信息请参阅 消息转换器。