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 条件

监听器容器变更

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

现在可以使用 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 日志追加器变更

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

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

追加器现在支持 SaslConfig 属性。

有关更多信息,请参阅 日志子系统 AMQP 追加器

MessageListenerAdapter 变更

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

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

ExchangeBuilderQueueBuilder 流式 API 用于通过 RabbitAdmin 声明 ExchangeQueue 对象,现在支持“知名”参数。有关更多信息,请参阅 队列和交换机的 Builder 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。有关更多信息,请参阅 交换机、队列和绑定的自动声明

QueueBuilder 中添加了 singleActiveConsumer() 以设置 x-single-active-consumer 队列参数。有关更多信息,请参阅 队列和交换机的 Builder API

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

现在支持恢复失败的生产者创建的批次。有关更多信息,请参阅 带批次监听器的重试

© . This site is unofficial and not affiliated with VMware.