此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

自 2.0 以来 2.1 的变化

AMQP 客户端库

Spring AMQP 现在使用 5.4.x 版本的amqp-clientRabbitMQ 团队提供的库。 默认情况下,此客户端配置了自动恢复。 请参见 RabbitMQ 自动连接/拓扑恢复spring-doc.cadn.net.cn

从 4.0 版开始,客户端默认启用自动恢复。 虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。 我们建议禁用amqp-client自动恢复,避免获得AutoRecoverConnectionNotCurrentlyOpenException代理可用但连接尚未恢复的情况。 从版本 1.7.1 开始,Spring AMQP 会禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给CachingConnectionFactory. 兔子MQConnectionFactoryRabbitConnectionFactoryBean默认情况下,还禁用该选项。

包更改

某些类已移至不同的包。 大多数是内部类,不会影响用户应用程序。 两个例外是ChannelAwareMessageListenerRabbitListenerErrorHandler. 这些接口现在位于org.springframework.amqp.rabbit.listener.api.spring-doc.cadn.net.cn

发布者确认更改

当有未完成的确认时,为发布者确认启用的通道不会返回到缓存中。 有关详细信息,请参阅相关发布者确认和退货spring-doc.cadn.net.cn

侦听器容器工厂改进

您现在可以使用侦听器容器工厂创建任何侦听器容器,而不仅仅是用于@RabbitListener注释或@RabbitListenerEndpointRegistry. 有关更多信息,请参阅使用容器工厂spring-doc.cadn.net.cn

ChannelAwareMessageListener现在继承自MessageListener.spring-doc.cadn.net.cn

代理事件侦听器

一个BrokerEventListener引入以将选定的代理事件发布为ApplicationEvent实例。 有关更多信息,请参阅代理事件侦听器spring-doc.cadn.net.cn

RabbitAdmin 更改

RabbitAdmin发现类型Declarables(这是一个容器Declarable - Queue,ExchangeBindingobjects),并在代理上声明包含的对象。 不鼓励用户使用旧的声明机制<Collection<Queue>>(和其他)并且应该使用Declarables豆子代替。 默认情况下,旧机制处于禁用状态。 有关详细信息,请参阅声明交换、队列和绑定的集合spring-doc.cadn.net.cn

AnonymousQueue实例现在使用x-queue-master-locator设置为client-local默认情况下,确保在应用程序连接到的节点上创建队列。 有关更多信息,请参阅配置代理spring-doc.cadn.net.cn

RabbitTemplate 更改

您现在可以配置RabbitTemplate使用noLocalReplyConsumer控制noLocal标记sendAndReceive()操作。 有关详细信息,请参阅请求/回复消息。spring-doc.cadn.net.cn

CorrelationData对于发布商确认,现在有一个ListenableFuture,您可以使用它来获取确认,而不是使用回调。 启用返回和确认后,将使用返回的消息填充相关数据(如果提供)。 有关详细信息,请参阅相关发布者确认和退货spring-doc.cadn.net.cn

一个名为replyTimedOut现在提供以通知子类回复已超时,从而允许任何状态清理。 有关更多信息,请参阅回复超时spring-doc.cadn.net.cn

您现在可以指定ErrorHandler将请求/回复与DirectReplyToMessageListenerContainer(默认值)当传递回复时发生异常(例如,延迟回复)。 看setReplyErrorHandlerRabbitTemplate. (也是从 2.0.11 开始)。spring-doc.cadn.net.cn

消息转换

我们引入了一个新的Jackson2XmlMessageConverter以支持将消息从 XML 格式转换到 XML 格式。 看Jackson2XmlMessageConverter了解更多信息。spring-doc.cadn.net.cn

管理 REST API

RabbitManagementTemplate现在已弃用,取而代之的是直接com.rabbitmq.http.client.Client(或com.rabbitmq.http.client.ReactorNettyClient) 用法。有关更多信息,请参阅 RabbitMQ REST APIspring-doc.cadn.net.cn

@RabbitListener变化

侦听器容器工厂现在可以配置RetryTemplate以及(可选)一个RecoveryCallback在发送回复时使用。有关更多信息,请参阅启用侦听器端点注释spring-doc.cadn.net.cn

异步@RabbitListener返回

@RabbitListener方法现在可以返回ListenableFuture<?>Mono<?>. 看异步@RabbitListener返回类型了解更多信息。spring-doc.cadn.net.cn

连接工厂 Bean 更改

默认情况下,RabbitConnectionFactoryBean现在调用enableHostnameVerification(). 要恢复到以前的行为,请将enableHostnameVerification属性设置为false.spring-doc.cadn.net.cn

连接工厂更改

CachingConnectionFactory现在无条件禁用底层 RabbitMQ 中的自动恢复ConnectionFactory,即使构造函数中提供了预配置的实例。虽然已经采取了措施使 Spring AMQP 与自动恢复兼容,但出现了某些问题仍然存在的极端情况。Spring AMQP 从 1.0.0 开始就有了自己的恢复机制,不需要使用客户端提供的恢复。虽然仍然可以启用该功能(使用cachingConnectionFactory.getRabbitConnectionFactory() .setAutomaticRecoveryEnabled()) 在CachingConnectionFactory我们强烈建议您不要这样做。我们建议您使用单独的 RabbitMQConnectionFactory如果您在直接使用客户端工厂(而不是使用 Spring AMQP 组件)时需要自动恢复连接。spring-doc.cadn.net.cn

侦听器容器更改

默认值ConditionalRejectingErrorHandler现在完全丢弃导致致命错误的消息,如果x-death标头。有关详细信息,请参阅异常处理spring-doc.cadn.net.cn

立即重新排队

一个新的ImmediateRequeueAmqpException引入来通知侦听器容器必须将消息重新排队。要使用此功能,新的ImmediateRequeueMessageRecoverer实现。spring-doc.cadn.net.cn

有关详细信息,请参阅消息侦听器和异步案例spring-doc.cadn.net.cn