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` 实例,而不是依赖于 JUnit 4 的 `BrokerRunning`。它们拥有相同的 API,因此只需更改任何引用的类名即可。更多信息请参见 JUnit5 Conditions

监听器容器变更

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

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

@RabbitListener 变更

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

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

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

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

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

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

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

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

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

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

AMQP 日志 Appender 变更

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

此外,这些 appender 现在可以配置为不将 MDC 条目作为头信息添加。已引入 addMdcAsHeaders 布尔选项来配置这种行为。

这些 appender 现在支持 SaslConfig 属性。

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

MessageListenerAdapter 变更

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

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

用于由 RabbitAdmin 声明 ExchangeQueue 对象的 ExchangeBuilderQueueBuilder 流式 API 现在支持“已知”参数。更多信息请参见 队列和交换机的 Builder API

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

连接工厂变更

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

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

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

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

新的 MessagePostProcessor 类

已添加 DeflaterPostProcessorInflaterPostProcessor 类,分别用于在消息的 content-encoding 设置为 deflate 时支持压缩和解压缩。

其他变更

Declarables 对象(用于声明多个队列、交换机、绑定)现在为每种类型提供了过滤的 getter 方法。更多信息请参见 声明交换机、队列和绑定的集合

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

已向 QueueBuilder 添加 singleActiveConsumer() 方法,用于设置 x-single-active-consumer 队列参数。更多信息请参见 队列和交换机的 Builder API

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

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