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]] == 交换/队列声明变化
ExchangeBuilder
和 QueueBuilder
流式 API 用于创建 Exchange
和 Queue
对象以供 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 类
添加了 DeflaterPostProcessor
和 InflaterPostProcessor
类,分别支持当消息内容编码设置为 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。