2.2 相较于 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 组件的完整测试实用程序集。

[[-breaking-api-changes]] == “破坏性” API 更改

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

ListenerContainer 更改

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

现在可以使用 Micrometer Timer 监视监听器性能。有关更多信息,请参见 监视监听器性能

@RabbitListener 更改

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

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

当一次接收一条批量消息时,最后一条消息的 isLastInBatch 消息属性设置为 true。

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

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

Spring Data Projection 接口现在受 Jackson2JsonMessageConverter 支持。有关更多信息,请参见 使用 Spring Data Projection 接口

如果不存在 contentType 属性,或者它是默认值(application/octet-string),则 Jackson2JsonMessageConverter 现在假定内容为 JSON。有关更多信息,请参见 Message 转换

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

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

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

AMQP 日志附加程序更改

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

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

这些附加程序现在支持 SaslConfig 属性。

有关更多信息,请参见 日志子系统 AMQP 附加程序

MessageListenerAdapter 更改

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

[[exchange/queue-declaration-changes]] == 交换机/队列声明更改

用于通过 RabbitAdmin 创建 ExchangeQueue 对象声明的 ExchangeBuilderQueueBuilder 流式 API 现在支持“众所周知”的参数。更多信息请参见 队列和交换机的构建器 API

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

连接工厂更改

CachingConnectionFactory 有一个新的属性 shuffleAddresses。当提供代理节点地址列表时,在创建连接之前会对列表进行洗牌,以便以随机顺序尝试连接。更多信息请参见 连接到集群

当使用发布者确认和返回时,回调现在会在连接工厂的 executor 上被调用。如果在回调中执行 rabbit 操作,这可以避免 amqp-clients 库中可能发生的死锁。更多信息请参见 关联的发布者确认和返回

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

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

新的 MessagePostProcessor 类

添加了 DeflaterPostProcessorInflaterPostProcessor 类,分别用于支持压缩和解压缩,前提是消息内容编码设置为 deflate

其他更改

Declarables 对象(用于声明多个队列、交换机、绑定)现在对每种类型都有一个过滤后的 getter。更多信息请参见 声明交换机、队列和绑定的集合

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

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

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

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