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

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

AMQP 客户端库

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

截至 4.0 版本,客户端默认启用自动恢复功能。虽然与该功能兼容,但 Spring AMQP 自身也具备恢复机制,因此客户端的自动恢复功能通常并不需要启用。我们建议禁用 amqp-client 自动恢复功能,以避免在代理服务可用但连接尚未恢复时出现 AutoRecoverConnectionNotCurrentlyOpenException 个实例。从 1.7.1 版本开始,Spring AMQP 默认禁用此功能,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给 CachingConnectionFactory。由 RabbitConnectionFactoryBean 创建的 RabbitMQ ConnectionFactory 实例也默认禁用该选项。

包变更

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

发布者确认更改

启用发布者确认的通道在存在未完成确认时不会返回到缓存中。有关更多信息,请参阅 关联的发布者确认和返回spring-doc.cadn.net.cn

监听器容器工厂改进

现在,您可以使用监听器容器工厂来创建任何监听器容器,而不仅限于用于与 @RabbitListener 注解或 @RabbitListenerEndpointRegistry 配合使用的容器。
有关更多信息,请参见 使用容器工厂spring-doc.cadn.net.cn

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

经纪人事件监听器

引入一个 BrokerEventListener 以将选定的代理事件发布为 ApplicationEvent 实例。代理事件监听器 了解更多信息。spring-doc.cadn.net.cn

RabbitAdmin 变更

RabbitAdmin 发现类型为 Declarables 的 Bean(这是一个包含 Declarable - QueueExchangeBinding 对象的容器),并在代理上声明其中包含的对象。
用户被建议不要使用旧的声明 <Collection<Queue>>(及其他)机制,而应改用 Declarables Bean。默认情况下,旧机制已被禁用。
有关更多信息,请参阅 声明交换机、队列和绑定的集合spring-doc.cadn.net.cn

AnonymousQueue 实例现在默认通过将 x-queue-master-locator 设置为 client-local 进行声明,以确保队列在应用程序所连接的节点上创建。有关更多信息,请参阅 配置代理spring-doc.cadn.net.cn

RabbitTemplate 变更

现在,您可以通过 RabbitTemplatenoLocalReplyConsumer 选项来配置 noLocal 标志,以控制在 sendAndReceive() 操作中回复消费者的行为。请求/回复消息传递 了解更多信息。spring-doc.cadn.net.cn

CorrelationData 用于发布者确认,现在已有一个 ListenableFuture,您可以使用它来获取确认信息,而无需再使用回调函数。
当返回和确认功能启用时,如果提供了相关数据,则会将返回的消息填充到该相关数据中。
有关更多信息,请参阅 带相关性的发布者确认与返回spring-doc.cadn.net.cn

现在提供了一个名为 replyTimedOut 的方法,用于通知子类回复已超时,以便进行任何状态清理。回复超时 了解更多信息。spring-doc.cadn.net.cn

现在,您可以在使用请求/回复(request/reply)时指定一个 ErrorHandler,当使用 DirectReplyToMessageListenerContainer(默认值)时,在回复传递过程中发生异常(例如,延迟回复)的情况下被调用。请参阅 setReplyErrorHandler 中的 RabbitTemplate。 (自 2.0.11 版本起也支持此功能)。spring-doc.cadn.net.cn

消息转换

我们引入了一个新的 Jackson2XmlMessageConverter,用于支持将消息在 XML 格式之间进行转换。
详情请参阅 Jackson2XmlMessageConverterspring-doc.cadn.net.cn

管理 REST API

现在已弃用 RabbitManagementTemplate,推荐直接使用 com.rabbitmq.http.client.Client(或 com.rabbitmq.http.client.ReactorNettyClient)。spring-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 属性设置为 falsespring-doc.cadn.net.cn

连接工厂变更

代码CachingConnectionFactory现在无条件禁用底层 RabbitMQ ConnectionFactory 的自动恢复功能,即使在构造函数中提供了预配置的实例也是如此。虽然已采取措施使 Spring AMQP 与自动恢复兼容,但仍出现某些边界情况导致问题依然存在。Spring AMQP 自 1.0.0 版本起便拥有自己的恢复机制,无需依赖客户端提供的恢复功能。尽管在 CachingConnectionFactory 构造完成后仍有可能启用该功能(通过 cachingConnectionFactory.getRabbitConnectionFactory().setAutomaticRecoveryEnabled()),但我们强烈建议您不要这样做。如果您需要在直接使用客户端工厂时启用自动恢复连接,请考虑使用独立的 RabbitMQ ConnectionFactory(而非使用 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