跳到主要内容

2.2 版本相对于 2.1 版本的变更

DeepSeek V3 中英对照 Changes in 2.2 Since 2.1

本节描述了版本 2.1 和版本 2.2 之间的变化。

包更改

以下类/接口已从 org.springframework.amqp.rabbit.core.support 移动到 org.springframework.amqp.rabbit.batch

  • BatchingStrategy(批处理策略)

  • MessageBatch(消息批次)

  • SimpleBatchingStrategy(简单批处理策略)

此外,ListenerExecutionFailedException 已经从 org.springframework.amqp.rabbit.listener.exception 移动到了 org.springframework.amqp.rabbit.support

依赖变更

JUnit (4) 现在是可选的依赖项,将不再作为传递依赖项出现。

spring-rabbit-junit 模块现在作为 compile 依赖项存在于 spring-rabbit-test 模块中,以便在仅使用单个 spring-rabbit-test 时获得更好的目标应用程序开发体验,同时获得完整的 AMQP 组件测试工具栈。

[[-breaking-api-changes]] == "破坏性" API 变更

JUnit (5) 的 RabbitAvailableCondition.getBrokerRunning() 现在返回一个 BrokerRunningSupport 实例,而不是依赖于 JUnit 4 的 BrokerRunning。它们的 API 是相同的,因此只需更改任何引用的类名即可。更多信息请参见 JUnit5 Conditions

ListenerContainer 变更

默认情况下,即使确认模式为手动,带有致命异常的消息现在也会被拒绝并且不会重新入队。有关更多信息,请参阅异常处理

现在可以使用 Micrometer 的 Timer 来监控监听器的性能。有关更多信息,请参阅监控监听器性能

@RabbitListener 的更改

现在,您可以在每个监听器上配置一个 executor,以覆盖工厂配置,从而更容易识别与监听器关联的线程。您现在可以使用注解的 ackMode 属性来覆盖容器工厂的 acknowledgeMode 属性。有关更多信息,请参阅覆盖容器工厂属性

在使用批处理时,@RabbitListener 方法现在可以在一次调用中接收完整的消息批次,而不是逐个接收。

在逐条接收批量消息时,最后一条消息的 isLastInBatch 消息属性会被设置为 true。

此外,接收到的批量消息现在包含 amqp_batchSize 头信息。

监听器也可以消费在 SimpleMessageListenerContainer 中创建的批次,即使该批次不是由生产者创建的。更多信息请参见选择容器

Jackson2JsonMessageConverter 现在支持 Spring Data Projection 接口。更多信息请参阅 使用 Spring Data Projection 接口

Jackson2JsonMessageConverter 现在假设内容是 JSON,如果没有 contentType 属性,或者它是默认值(application/octet-string)。更多信息请参见 从消息转换

同样地,Jackson2XmlMessageConverter 现在假设如果没有 contentType 属性,或者它是默认值(application/octet-string),则内容为 XML。更多信息请参见 Jackson2XmlMessageConverter

@RabbitListener 方法返回结果时,bean 和 Method 现在可以在回复消息的属性中使用。这允许配置一个 beforeSendReplyMessagePostProcessor,例如,在回复中设置一个标头以指示在服务器上调用了哪个方法。有关更多信息,请参阅回复管理

现在,您可以配置一个 ReplyPostProcessor 来在发送回复消息之前对其进行修改。更多信息请参阅回复管理

AMQP 日志追加器变更

Log4J 和 Logback 的 AmqpAppender 现在支持 verifyHostname SSL 选项。

此外,现在还可以配置这些 appender 以不将 MDC 条目添加为标头。引入了 addMdcAsHeaders 布尔选项来配置此类行为。

现在,appenders 支持 SaslConfig 属性。

有关更多信息,请参见日志子系统 AMQP 追加器

MessageListenerAdapter 的更改

MessageListenerAdapter 现在提供了一个新的 buildListenerArguments(Object, Channel, Message) 方法,用于构建传递给目标监听器的参数数组,而旧的方法已被弃用。更多信息请参见 MessageListenerAdapter

[[exchange/queue-declaration-changes]] == Exchange/Queue 声明变更

用于创建 ExchangeQueue 对象以通过 RabbitAdmin 进行声明的 ExchangeBuilderQueueBuilder 流畅 API 现在支持“已知”参数。有关更多信息,请参阅 Queues 和 Exchanges 的构建器 API

RabbitAdmin 有一个新的属性 explicitDeclarationsOnly。有关更多信息,请参见条件声明

连接工厂变更

CachingConnectionFactory 新增了一个属性 shuffleAddresses。当提供一组 broker 节点地址时,该列表将在创建连接之前进行随机排序,以便尝试连接的顺序是随机的。更多信息请参阅连接到集群

在使用 Publisher confirms 和 returns 时,回调现在会在连接工厂的 executor 上调用。这避免了在回调中执行 Rabbit 操作时可能导致的 amqp-clients 库中的死锁问题。有关更多信息,请参见 Correlated Publisher Confirms and Returns

此外,发布者确认类型现在使用 ConfirmType 枚举来指定,而不是使用两个互斥的 setter 方法。

RabbitConnectionFactoryBean 现在在启用 SSL 时默认使用 TLS 1.2。有关更多信息,请参阅 RabbitConnectionFactoryBean 和配置 SSL

新的 MessagePostProcessor 类

DeflaterPostProcessorInflaterPostProcessor 被添加,分别用于在消息内容编码设置为 deflate 时支持压缩和解压缩。

其他变更

Declarables 对象(用于声明多个队列、交换器和绑定)现在为每种类型提供了一个过滤后的 getter。有关更多信息,请参阅 声明交换器、队列和绑定的集合

现在,你可以在 RabbitAdmin 处理声明之前自定义每个 Declarable bean。更多信息请参见交换器、队列和绑定的自动声明

singleActiveConsumer() 已被添加到 QueueBuilder 中,用于设置 x-single-active-consumer 队列参数。有关更多信息,请参见队列和交换机的构建器 API

现在,类型为 Class<?> 的出站头部值将使用 getName() 方法进行映射,而不是 toString() 方法。更多信息请参阅 消息属性转换器

现在支持恢复由生产者创建的失败批次。更多信息请参阅使用批次监听器重试