Changes in 2.2 Since 2.1

  • 将类和接口从 org.springframework.amqp.rabbit.core.support 移动到 org.springframework.amqp.rabbit.batch

  • JUnit (4) 成为可选依赖项,JUnit (5) 的`RabbitAvailableCondition.getBrokerRunning()` 返回不同的实例

  • 改进了侦听器容器性能监控和消息处理

  • 增强了 @RabbitListener 注解,包括支持批处理和覆写容器工厂属性

  • 添加了对 Spring 数据投影接口和 Jackson 转换器的改进支持

  • 引入了新的消息后处理器,用于压缩和解压缩

  • 改进了对交换和队列声明的流利 API 支持和错误恢复功能

本节介绍了 2.1 版和 2.2 版之间的更改。

Package Changes

以下类/接口已从 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

Dependency Changes

JUnit (4) 现在是可选依赖项,不再显示为传递依赖项。

spring-rabbit-junit 模块现在是 spring-rabbit-test 模块中的 编译 依赖项,以便在仅使用单个 spring-rabbit-test 时获得 AMQP 组件的完整测试实用程序栈,从而获得更好的目标应用程序开发体验。

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

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

ListenerContainer Changes

默认情况下,带有致命异常的消息现已被拒绝,而不会再次加入队列,即使确认模式为手动模式。有关更多信息,请参见Exception Handling

现在可以使用Micrometer`Timer`对监听器性能进行监控。有关更多信息,请参见Monitoring Listener Performance

@RabbitListener Changes

您现在可以在每个侦听器上配置 executor,覆盖工厂配置,以更轻松地识别与侦听器关联的线程。您现在可以使用注释的 ackMode 属性覆盖容器工厂的 acknowledgeMode 属性。参见 overriding container factory properties 了解更多信息。

使用batching时, `@RabbitListener`方法现在可以在一个调用中接收一批完成的消息,而不必一次接收一条。

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

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

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

Jackson2JsonMessageConverter 现支持 Spring 数据投影接口。参见 Using Spring Data Projection Interfaces 了解更多信息。

如果不存在 contentType 属性,或它是默认值 (application/octet-string),则 Jackson2JsonMessageConverter 现在假定内容是 JSON。参见 Converting from a Message 了解更多信息。

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

当`@RabbitListener`方法返回结果时,bean和`Method`现在可以在回复消息属性中获取。这允许配置`beforeSendReplyMessagePostProcessor`,例如,设置回复中的头,以指示在服务器上调用的方法。有关更多信息,请参见Reply Management

你现在可以配置`ReplyPostProcessor`,以便在发送回复消息之前对其进行修改。有关更多信息,请参见Reply Management

AMQP Logging Appenders Changes

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

这些追加器现在可以配置为不将 MDC 条目添加为标头。addMdcAsHeaders 布尔选项已引入以配置此类行为。

追加器现在支持 SaslConfig 属性。

有关更多信息,请参见Logging Subsystem AMQP Appenders

MessageListenerAdapter Changes

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

[[exchange/queue-declaration-changes]]== Exchange/队列声明更改

现在,用于创建 ExchangeQueue 对象以供 RabbitAdmin 声明的 ExchangeBuilderQueueBuilder Fluent API 支持“众所周知”的参数。参见 Builder API for Queues and Exchanges 了解更多信息。

RabbitAdmin 具有新属性 explicitDeclarationsOnly。有关详细信息,请参见 Conditional Declaration

Connection Factory Changes

CachingConnectionFactory 具有新属性 shuffleAddresses。在提供代理节点地址列表时,该列表将在创建连接之前被打乱,以使尝试连接的顺序是随机的。有关详细信息,请参见 Connecting to a Cluster

在使用发布者确认和返回时,现在在连接工厂的 executor 上调用回调。这将避免在 amqp-clients 库中执行一些 Rabbit 操作导致潜在死锁。有关详细信息,请参见 Correlated Publisher Confirms and Returns

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

现在,在启用 SSL 时,RabbitConnectionFactoryBean 默认使用 TLS 1.2。有关详细信息,请参见 RabbitConnectionFactoryBean and Configuring SSL

New MessagePostProcessor Classes

当消息内容编码设置为 deflate 时,已添加类 DeflaterPostProcessorInflaterPostProcessor 来分别支持压缩和解压缩。

Other Changes

现在,Declarables 对象(用于声明多个队列、交换和绑定)对每种类型具有筛选的 getter。有关详细信息,请参见 Declaring Collections of Exchanges, Queues, and Bindings

您现在可以在 RabbitAdmin 处理声明之前自定义每个 Declarable Bean。有关详细信息,请参见 Automatic Declaration of Exchanges, Queues, and Bindings

已将 singleActiveConsumer() 添加到 QueueBuilder 中以设置 x-single-active-consumer 队列参数。有关详细信息,请参见 Builder API for Queues and Exchanges

现在使用 getName() 而不是 toString() 映射具有类型值 Class<?> 的出站标头。有关详细信息,请参见 Message Properties Converters

现在支持恢复失败的生产者创建的事务。有关详细信息,请参见 Retry with Batch Listeners