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
模块现在作为 compile 依赖项存在于 spring-rabbit-test
模块中,以便在仅使用单个 spring-rabbit-test
时获得更好的目标应用程序开发体验,同时获得完整的 AMQP 组件测试工具栈。
[[-breaking-api-changes]] == "破坏性" API 变更
JUnit (5) 的 RabbitAvailableCondition.getBrokerRunning()
现在返回一个 BrokerRunningSupport
实例,而不是依赖于 JUnit 4 的 BrokerRunning
。它们的 API 是相同的,因此只需更改任何引用的类名即可。更多信息请参见 JUnit5 Conditions。
ListenerContainer 变更
默认情况下,即使确认模式为手动,带有致命异常的消息现在也会被拒绝并且不会重新入队。有关更多信息,请参阅异常处理。
现在可以使用 Micrometer 的 Timer
来监控监听器的性能。有关更多信息,请参阅监控监听器性能。
@RabbitListener 的更改
现在,您可以在每个监听器上配置一个 executor
,以覆盖工厂配置,从而更容易识别与监听器关联的线程。您现在可以使用注解的 ackMode
属性来覆盖容器工厂的 acknowledgeMode
属性。有关更多信息,请参阅覆盖容器工厂属性。
在使用批处理时,@RabbitListener
方法现在可以在一次调用中接收完整的消息批次,而不是逐个接收。
在逐条接收批量消息时,最后一条消息的 isLastInBatch
消息属性会被设置为 true。
此外,接收到的批量消息现在包含 amqp_batchSize
头信息。
监听器也可以消费在 SimpleMessageListenerContainer
中创建的批次,即使该批次不是由生产者创建的。更多信息请参见选择容器。
Jackson2JsonMessageConverter
现在支持 Spring Data Projection 接口。更多信息请参阅 使用 Spring Data Projection 接口。
Jackson2JsonMessageConverter
现在假设内容是 JSON,如果没有 contentType
属性,或者它是默认值(application/octet-string
)。更多信息请参见 从消息转换。
同样地,Jackson2XmlMessageConverter
现在假设如果没有 contentType
属性,或者它是默认值(application/octet-string
),则内容为 XML。更多信息请参见 Jackson2XmlMessageConverter。
当 @RabbitListener
方法返回结果时,bean 和 Method
现在可以在回复消息的属性中使用。这允许配置一个 beforeSendReplyMessagePostProcessor
,例如,在回复中设置一个标头以指示在服务器上调用了哪个方法。有关更多信息,请参阅回复管理。
现在,您可以配置一个 ReplyPostProcessor
来在发送回复消息之前对其进行修改。更多信息请参阅回复管理。
AMQP 日志追加器变更
Log4J 和 Logback 的 AmqpAppender
现在支持 verifyHostname
SSL 选项。
此外,现在还可以配置这些 appender 以不将 MDC 条目添加为标头。引入了 addMdcAsHeaders
布尔选项来配置此类行为。
现在,appenders 支持 SaslConfig
属性。
有关更多信息,请参见日志子系统 AMQP 追加器。
MessageListenerAdapter 的更改
MessageListenerAdapter
现在提供了一个新的 buildListenerArguments(Object, Channel, Message)
方法,用于构建传递给目标监听器的参数数组,而旧的方法已被弃用。更多信息请参见 MessageListenerAdapter。
[[exchange/queue-declaration-changes]] == Exchange/Queue 声明变更
用于创建 Exchange
和 Queue
对象以通过 RabbitAdmin
进行声明的 ExchangeBuilder
和 QueueBuilder
流畅 API 现在支持“已知”参数。有关更多信息,请参阅 Queues 和 Exchanges 的构建器 API。
RabbitAdmin
有一个新的属性 explicitDeclarationsOnly
。有关更多信息,请参见条件声明。
连接工厂变更
CachingConnectionFactory
新增了一个属性 shuffleAddresses
。当提供一组 broker 节点地址时,该列表将在创建连接之前进行随机排序,以便尝试连接的顺序是随机的。更多信息请参阅连接到集群。
在使用 Publisher confirms 和 returns 时,回调现在会在连接工厂的 executor
上调用。这避免了在回调中执行 Rabbit 操作时可能导致的 amqp-clients
库中的死锁问题。有关更多信息,请参见 Correlated Publisher Confirms and Returns。
此外,发布者确认类型现在使用 ConfirmType
枚举来指定,而不是使用两个互斥的 setter 方法。
RabbitConnectionFactoryBean
现在在启用 SSL 时默认使用 TLS 1.2。有关更多信息,请参阅 RabbitConnectionFactoryBean 和配置 SSL。
新的 MessagePostProcessor 类
类 DeflaterPostProcessor
和 InflaterPostProcessor
被添加,分别用于在消息内容编码设置为 deflate
时支持压缩和解压缩。
其他变更
Declarables
对象(用于声明多个队列、交换器和绑定)现在为每种类型提供了一个过滤后的 getter。有关更多信息,请参阅 声明交换器、队列和绑定的集合。
现在,你可以在 RabbitAdmin
处理声明之前自定义每个 Declarable
bean。更多信息请参见交换器、队列和绑定的自动声明。
singleActiveConsumer()
已被添加到 QueueBuilder
中,用于设置 x-single-active-consumer
队列参数。有关更多信息,请参见队列和交换机的构建器 API。
现在,类型为 Class<?>
的出站头部值将使用 getName()
方法进行映射,而不是 toString()
方法。更多信息请参阅 消息属性转换器。
现在支持恢复由生产者创建的失败批次。更多信息请参阅使用批次监听器重试。