Changes in 2.1 Since 2.0

AMQP Client library

Spring AMPQ 现使用 RabbitMQ 团队提供的 amqp-client 库的 5.4.x 版本。此客户端默认配置了自动恢复。参见 RabbitMQ Automatic Connection/Topology recovery

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

Package Changes

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

Publisher Confirms Changes

在有未决确认的情况下,为发布者确认启用的通道不会返回到缓存。参见 Correlated Publisher Confirms and Returns 了解更多信息。

Listener Container Factory Improvements

你现在可以使用监听器容器工厂创建任何监听器容器,而不仅仅是那些与 @RabbitListener 注释或 @RabbitListenerEndpointRegistry 配合使用的容器。有关更多信息,请参见 Using Container Factories

ChannelAwareMessageListener 现在继承自 MessageListener

Broker Event Listener

引入了 BrokerEventListener 以将所选的代理事件发布为 ApplicationEvent 实例。有关更多信息,请参见 Broker Event Listener

RabbitAdmin Changes

RabbitAdmin 发现类型为 Declarables 的 Bean(它是一个容器,用于 Declarable - QueueExchange`和 `Binding 对象),并在代理上声明包含的对象。建议用户不要使用旧机制来声明 <Collection<Queue>>(以及其他机制),而应改用 Declarables Bean。默认情况下,旧机制被禁用。参见 Declaring Collections of Exchanges, Queues, and Bindings 了解更多信息。

AnonymousQueue 实例现在声明时默认将 x-queue-master-locator 设置为 client-local,以确保在应用程序已连接到的节点上创建队列。有关更多信息,请参见 Configuring the Broker

RabbitTemplate Changes

你现在可以用 noLocalReplyConsumer 选项配置 RabbitTemplate,以便控制 sendAndReceive() 操作中的回复消费者 noLocal 标志。有关更多信息,请参见 Request/Reply Messaging

CorrelationData 进行发布者确认现已包含 ListenableFuture,您可以使用它来获取确认而不是使用回调。当启用返回和确认时,如果提供了相关数据,将使用返回的消息填充相关数据。参见 Correlated Publisher Confirms and Returns 了解更多信息。

现已提供名为 replyTimedOut 的方法来通知子类回复已超时,从而允许进行任何状态清理。参见 Reply Timeout 了解更多信息。

当使用 DirectReplyToMessageListenerContainer(默认)发出请求/返回消息时,您现在可以指定一个 ErrorHandler,以便当传输回复时(例如,延迟回复)发生异常时调用该错误处理程序。请参阅 RabbitTemplate 上的 setReplyErrorHandler。(自 2.0.11 版起)

Message Conversion

我们引入了一个新的 Jackson2XmlMessageConverter,以支持消息与 XML 格式之间进行转换。参见 Jackson2XmlMessageConverter 了解更多信息。

Management REST API

RabbitManagementTemplate 现已弃用,建议直接使用 com.rabbitmq.http.client.Client(或 com.rabbitmq.http.client.ReactorNettyClient)。有关更多信息,请参见 Management REST API

@RabbitListener Changes

现在,监听器容器工厂可以用一个`RetryTemplate`来进行配置,并且可以利用一个`RecoveryCallback`来进行可选配置,在发送应答时使用。有关更多信息,请参见Enable Listener Endpoint Annotations

Async @RabbitListener Return

现在, @RabbitListener`方法可以返回`ListenableFuture<?>`或`Mono<?>。有关更多信息,请参见Asynchronous @RabbitListener Return Types

Connection Factory Bean Changes

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

Connection Factory Changes

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

Listener Container Changes

现在,默认的`ConditionalRejectingErrorHandler`如果存在`x-death`头,则会完全丢弃导致致命错误的消息。有关更多信息,请参见Exception Handling

Immediate requeue

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

请查阅 Message Listeners and the Asynchronous Case 了解更多信息。