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/队列声明更改
现在,用于创建 Exchange
和 Queue
对象以供 RabbitAdmin
声明的 ExchangeBuilder
和 QueueBuilder
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
时,已添加类 DeflaterPostProcessor
和 InflaterPostProcessor
来分别支持压缩和解压缩。
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。