此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring AMQP 4.0.2spring-doc.cadn.net.cn

2.2 版本相较于 2.1 版本的变更

本节描述了版本 2.1 和版本 2.2 之间的变更。spring-doc.cadn.net.cn

包变更

以下类/接口已从 org.springframework.amqp.rabbit.core.support 移动到 org.springframework.amqp.rabbit.batchspring-doc.cadn.net.cn

此外,ListenerExecutionFailedException 已从 org.springframework.amqp.rabbit.listener.exception 移动到 org.springframework.amqp.rabbit.supportspring-doc.cadn.net.cn

依赖变更

JUnit (4) 现在是可选依赖项,将不再作为传递依赖项出现。spring-doc.cadn.net.cn

模块 spring-rabbit-junit 现在作为 编译 依赖项包含在模块 spring-rabbit-test 中,以便在仅使用单一 spring-rabbit-test 的情况下,为 AMQP 组件提供完整的测试工具集,从而提升目标应用的开发体验。spring-doc.cadn.net.cn

“突破性” API 变更

JUnit (5) RabbitAvailableCondition.getBrokerRunning() 现在返回一个 BrokerRunningSupport 实例,而不是一个 BrokerRunning,后者依赖于 JUnit 4。它具有相同的 API,因此只需更改任何引用的类名即可。有关更多信息,请参阅 JUnit5 条件spring-doc.cadn.net.cn

监听器容器变更

带有严重异常的消息现在将被拒绝且不会重新入队,即使确认模式为手动,默认情况下也是如此。有关更多信息,请参阅 异常处理spring-doc.cadn.net.cn

现在可以使用 Micrometer 监控监听器性能 Timer 秒。
有关更多信息,请参阅 监控监听器性能spring-doc.cadn.net.cn

@RabbitListener 变更

现在,您可以在每个监听器上配置 executor,以覆盖工厂配置,从而更轻松地识别与监听器关联的线程。
现在,您可以使用注解的 ackMode 属性覆盖容器工厂的 acknowledgeMode 属性。
有关更多信息,请参阅 覆盖容器工厂属性spring-doc.cadn.net.cn

在使用 批处理 时,@RabbitListener 方法现在可以在一次调用中接收完整的一批消息,而无需逐个获取。spring-doc.cadn.net.cn

在逐个接收批处理消息时,最后一则消息的 isLastInBatch 消息属性被设置为 true。spring-doc.cadn.net.cn

此外,现在接收到的批量消息包含 amqp_batchSize 头部。spring-doc.cadn.net.cn

监听器还可以消费在 SimpleMessageListenerContainer 中创建的批次,即使该批次并非由生产者创建。有关更多信息,请参阅 选择容器spring-doc.cadn.net.cn

Spring Data 投影接口现已由 Jackson2JsonMessageConverter 支持。有关更多信息,请参阅 使用 Spring Data 投影接口spring-doc.cadn.net.cn

Jackson2JsonMessageConverter 现在假设内容为 JSON,如果不存在 contentType 属性,或者它是默认值(application/octet-string)。spring-doc.cadn.net.cn

同样,Jackson2XmlMessageConverter 现在会假设内容为 XML,前提是不存在 contentType 属性,或者它为默认值(application/octet-string)。
有关更多信息,请参阅 Jackson2XmlMessageConverterspring-doc.cadn.net.cn

@RabbitListener 方法返回结果时,bean 和 Method 现在可在回复消息属性中使用。这允许配置一个 beforeSendReplyMessagePostProcessor,例如在回复中设置一个头信息,以指示服务器上调用了哪个方法。有关更多信息,请参阅 回复管理spring-doc.cadn.net.cn

现在,您可以配置一个 ReplyPostProcessor,以便在发送回复消息前对其进行修改。
有关更多信息,请参阅 回复管理spring-doc.cadn.net.cn

AMQP 日志追加器变更

Log4J 和 Logback 的 AmqpAppender 版本现在支持 verifyHostname SSL 选项。spring-doc.cadn.net.cn

此外,这些附加组件现在可以配置为不将 MDC 条目作为请求头添加。addMdcAsHeaders 布尔选项已引入,用于配置此类行为。spring-doc.cadn.net.cn

附加组件现在支持 SaslConfig 属性。spring-doc.cadn.net.cn

请参阅 日志子系统 AMQP Appender 以获取更多信息。spring-doc.cadn.net.cn

MessageListenerAdapter 的更改

spring-doc.cadn.net.cn

The MessageListenerAdapter provides now a new buildListenerArguments(Object, Channel, Message) method to build an array of arguments to be passed into target listener and an old one is deprecated. See MessageListenerAdapter for more information.spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

交换器/队列声明变更

用于通过 RabbitAdmin 声明创建 ExchangeQueue 对象的 ExchangeBuilderQueueBuilder 流式 API 现在支持“常见”参数。有关更多信息,请参阅 队列和交换器的构建器 APIspring-doc.cadn.net.cn

属性 RabbitAdmin 新增了一个属性 explicitDeclarationsOnly
有关更多信息,请参阅 条件声明spring-doc.cadn.net.cn

连接工厂变更

属性 CachingConnectionFactory 新增了一个属性 shuffleAddresses。在提供代理节点地址列表时,该列表会在建立连接前进行随机打乱,以确保尝试连接的顺序是随机的。有关更多信息,请参阅 连接到集群spring-doc.cadn.net.cn

在使用发布者确认和返回时,回调现在将在连接工厂的 executor 上调用。这可避免在您从回调内部执行 Rabbit 操作时,amqp-clients 库中可能出现的死锁问题。有关更多信息,请参阅 带关联的发布者确认和返回spring-doc.cadn.net.cn

此外,发布者确认类型现在通过 ConfirmType 枚举指定,而不是通过两种互斥的setter方法。spring-doc.cadn.net.cn

新消息后处理器类

DeflaterPostProcessorInflaterPostProcessor 已被添加,分别用于在消息内容编码设置为 deflate 时支持压缩和解压缩。spring-doc.cadn.net.cn

其他变更

The Declarables object(用于声明多个队列、交换机和绑定关系)现在为每种类型提供了过滤后的getter方法。
有关更多信息,请参阅声明交换机、队列和绑定的集合spring-doc.cadn.net.cn

现在,您可以在 Declarable Bean 被 RabbitAdmin 处理其声明之前对其进行自定义。
有关更多信息,请参阅 自动声明交换机、队列和绑定spring-doc.cadn.net.cn

singleActiveConsumer() 已添加到 QueueBuilder 中,以设置 x-single-active-consumer 队列参数。
有关更多信息,请参阅 队列和交换器的 Builder APIspring-doc.cadn.net.cn

出站头信息中值类型为 Class<?> 的现在使用 getName() 进行映射,而非 toString()
有关更多信息,请参阅 消息属性转换器spring-doc.cadn.net.cn

已支持恢复失败的生产者创建的消息批次。
详情请参阅 使用批处理监听器重试spring-doc.cadn.net.cn