跳到主要内容
版本:4.1.1

2.2 自 2.1 以来的变更

Doubao 中英对照 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 模块现在是 spring-rabbit-test 模块的编译依赖,以获得更好的目标应用开发体验——只需一个 spring-rabbit-test 即可获得 AMQP 组件的完整测试工具栈。

“破坏性” API 变更​

JUnit (5) 的 RabbitAvailableCondition.getBrokerRunning() 现在返回 BrokerRunningSupport 实例,而不是依赖 JUnit 4 的 BrokerRunning。它具有相同的 API,因此只需更改任何引用处的类名。更多信息参见JUnit5 条件。

ListenerContainer 变更​

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

现在可以使用 Micrometer Timer 监控 listener 性能。更多信息参见监控 Listener 性能。

@RabbitListener 变更​

现在可以在每个 listener 上配置 executor,覆盖工厂配置,以便更容易识别与该 listener 关联的线程。现在可以用注解的 ackMode 属性覆盖容器工厂的 acknowledgeMode 属性。更多信息参见覆盖容器工厂属性。

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

逐条接收批处理消息时,最后一条消息的 isLastInBatch 消息属性被设为 true。

此外,接收到的批处理消息现在包含 amqp_batchSize header。

Listener 也可以消费在 SimpleMessageListenerContainer 中创建的批次,即使该批次不是由 producer 创建的。更多信息参见选择容器。

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

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

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

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

现在可以配置 ReplyPostProcessor,以便在回复消息发送前对其进行修改。更多信息参见回复管理。

AMQP 日志 Appender 变更​

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

此外,这些 appender 现在可以配置为不将 MDC 条目作为 header 添加。新增了 addMdcAsHeaders 布尔选项来配置这种行为。

这些 appender 现在支持 SaslConfig 属性。

更多信息参见日志子系统 AMQP Appender。

MessageListenerAdapter 变更​

MessageListenerAdapter 现在提供新的 buildListenerArguments(Object, Channel, Message) 方法,用于构建传递给目标 listener 的参数数组,旧方法已废弃。更多信息参见MessageListenerAdapter。

Exchange/Queue 声明变更​

用于创建供 RabbitAdmin 声明的 Exchange 和 Queue 对象的 ExchangeBuilder 和 QueueBuilder fluent API,现在支持“知名”参数。更多信息参见队列与 Exchange 的 Builder API。

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

连接工厂变更​

CachingConnectionFactory 有一个新属性 shuffleAddresses。提供 broker 节点地址列表时,在创建连接之前会打乱该列表,以便连接尝试的顺序是随机的。更多信息参见连接到集群。

使用 Publisher confirm 和 return 时,回调现在在连接工厂的 executor 上调用。如果你在回调内执行 Rabbit 操作,这可避免 amqp-clients 库中可能的死锁。更多信息参见关联的 Publisher Confirm 与 Return。

此外,publisher confirm 类型现在用 ConfirmType 枚举指定,而不是用两个互斥的 setter 方法。

启用 SSL 时,RabbitConnectionFactoryBean 现在默认使用 TLS 1.2。更多信息参见RabbitConnectionFactoryBean 与配置 SSL。

新的 MessagePostProcessor 类​

新增了 DeflaterPostProcessor 和 InflaterPostProcessor 类,用于在消息 content-encoding 设为 deflate 时分别支持压缩和解压缩。

其他变更​

Declarables 对象(用于声明多个队列、exchange、binding)现在为每种类型提供了过滤后的 getter。更多信息参见声明 Exchange、Queue 与 Binding 的集合。

现在可以在 RabbitAdmin 处理每个 Declarable Bean 的声明之前对其进行自定义。更多信息参见Exchange、Queue 与 Binding 的自动声明。

QueueBuilder 新增了 singleActiveConsumer(),用于设置 x-single-active-consumer 队列参数。更多信息参见队列与 Exchange 的 Builder API。

值类型为 Class<?> 的出站 header 现在使用 getName() 而非 toString() 进行映射。更多信息参见消息属性转换器。

现在支持恢复失败的、由 producer 创建的批次。更多信息参见批次监听器重试。