2.1 相较 2.0 的变化

AMQP 客户端库

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

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

包变更

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

发布者确认变更

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

监听器容器工厂改进

您现在可以使用监听器容器工厂创建任何监听器容器,而不仅仅是用于 @RabbitListener 注解或 @RabbitListenerEndpointRegistry 的容器。有关更多信息,请参阅使用容器工厂

ChannelAwareMessageListener 现在继承自 MessageListener

代理事件监听器

引入了 BrokerEventListener 以将选定的代理事件作为 ApplicationEvent 实例发布。有关更多信息,请参阅代理事件监听器

RabbitAdmin 变更

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

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

RabbitTemplate 变更

您现在可以使用 noLocalReplyConsumer 选项配置 RabbitTemplate,以控制 sendAndReceive() 操作中回复消费者的 noLocal 标志。有关更多信息,请参阅请求/回复消息传递

用于发布者确认的 CorrelationData 现在有一个 ListenableFuture,您可以使用它来获取确认,而不是使用回调。当启用返回和确认时,如果提供了关联数据,则会填充返回的消息。有关更多信息,请参阅关联的发布者确认和返回

现在提供了一个名为 replyTimedOut 的方法,用于通知子类回复已超时,从而允许进行任何状态清理。有关更多信息,请参阅回复超时

当使用 DirectReplyToMessageListenerContainer(默认)进行请求/回复时,如果回复传递时发生异常(例如,延迟回复),您现在可以指定一个 ErrorHandler 来调用。请参阅 RabbitTemplate 上的 setReplyErrorHandler。(也从 2.0.11 开始)。

消息转换

我们引入了一个新的 Jackson2XmlMessageConverter 来支持将消息转换为 XML 格式,以及从 XML 格式转换。有关更多信息,请参阅Jackson2XmlMessageConverter

管理 REST API

现在不推荐使用 RabbitManagementTemplate,取而代之的是直接使用 com.rabbitmq.http.client.Client(或 com.rabbitmq.http.client.ReactorNettyClient)。有关更多信息,请参阅RabbitMQ REST API

@RabbitListener 的更改

现在可以使用 RetryTemplate 配置监听器容器工厂,并可选择配置在发送回复时使用的 RecoveryCallback。有关更多信息,请参阅启用监听器端点注解

异步 @RabbitListener 返回

@RabbitListener 方法现在可以返回 ListenableFuture<?>Mono<?>。有关更多信息,请参阅异步 @RabbitListener 返回类型

连接工厂 Bean 变更

默认情况下,RabbitConnectionFactoryBean 现在调用 enableHostnameVerification()。要恢复到以前的行为,请将 enableHostnameVerification 属性设置为 false

连接工厂的更改

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

侦听器容器的更改

如果存在 x-death 头部,默认的 ConditionalRejectingErrorHandler 现在会完全丢弃导致致命错误的消息。有关更多信息,请参阅异常处理

立即重新入队

引入了一个新的 ImmediateRequeueAmqpException,用于通知监听器容器消息必须重新入队。为了使用此功能,添加了一个新的 ImmediateRequeueMessageRecoverer 实现。

有关更多信息,请参阅消息监听器和异步情况

© . This site is unofficial and not affiliated with VMware.