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 模块中的一个 compile 依赖项,以便在使用单个 spring-rabbit-test 时,我们可以获得 AMQP 组件的完整测试实用程序栈,从而提供更好的目标应用程序开发体验。

[[-breaking-api-changes]] == “破坏性”API 变化

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

监听器容器变化

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

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

@RabbitListener 变化

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

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

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

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

监听器还可以消费在 SimpleMessageListenerContainer 中创建的批次,即使批次不是由生产者创建的。 有关更多信息,请参阅 Choosing a Container

Jackson2JsonMessageConverter 现在支持 Spring Data Projection 接口。 有关更多信息,请参阅 Using Spring Data Projection Interfaces

如果 Jackson2JsonMessageConverter 没有 contentType 属性,或者它是默认值 (application/octet-string),则现在假定内容是 JSON。 有关更多信息,请参阅 Converting from a Message

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

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

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

AMQP 日志附加器变化

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

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

附加器现在支持 SaslConfig 属性。

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

MessageListenerAdapter 变化

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

[[exchange/queue-declaration-changes]] == 交换/队列声明变化

ExchangeBuilderQueueBuilder 流式 API 用于创建 ExchangeQueue 对象以供 RabbitAdmin 声明,现在支持“众所周知”的参数。 有关更多信息,请参阅 Builder API for Queues and Exchanges

RabbitAdmin 有一个新的属性 explicitDeclarationsOnly。 有关更多信息,请参阅 Conditional Declaration

连接工厂变化

CachingConnectionFactory 有一个新的属性 shuffleAddresses。 当提供代理节点地址列表时,列表将在创建连接之前被打乱,以便尝试连接的顺序是随机的。 有关更多信息,请参阅 Connecting to a Cluster

当使用发布者确认和返回时,回调现在在连接工厂的 executor 上调用。 这避免了如果您从回调中执行 rabbit 操作,amqp-clients 库中可能发生的死锁。 有关更多信息,请参阅 Correlated Publisher Confirms and Returns

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

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

新的 MessagePostProcessor 类

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

其他变化

Declarables 对象(用于声明多个队列、交换、绑定)现在为每种类型提供了一个过滤的 getter。 有关更多信息,请参阅 Declaring Collections of Exchanges, Queues, and Bindings

现在可以在 RabbitAdmin 处理声明之前自定义每个 Declarable bean。 有关更多信息,请参阅 Automatic Declaration of Exchanges, Queues, and Bindings

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

类型为 Class<?> 的出站头现在使用 getName() 而不是 toString() 进行映射。 有关更多信息,请参阅 Message Properties Converters

现在支持恢复失败的生产者创建的批次。 有关更多信息,请参阅 Retry with Batch Listeners