2.1 相较于 2.0 的变化
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的 amqp-client
库的 5.4.x 版本。此客户端默认配置了自动恢复功能。请参阅 RabbitMQ 自动连接/拓扑恢复。
从 4.0 版本开始,客户端默认启用自动恢复。虽然与此功能兼容,但 Spring AMQP 拥有自己的恢复机制,并且通常不需要客户端恢复功能。我们建议禁用 amqp-client 自动恢复功能,以避免在代理可用但连接尚未恢复时出现 AutoRecoverConnectionNotCurrentlyOpenException 实例。从 1.7.1 版本开始,Spring AMQP 禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给 CachingConnectionFactory 。由 RabbitConnectionFactoryBean 创建的 RabbitMQ ConnectionFactory 实例也默认禁用了此选项。 |
包变更
某些类已移动到不同的包中。大多数是内部类,不会影响用户应用程序。两个例外是 ChannelAwareMessageListener
和 RabbitListenerErrorHandler
。这些接口现在位于 org.springframework.amqp.rabbit.listener.api
中。
发布者确认变更
启用发布者确认的通道在存在未完成确认时不会返回到缓存。请参阅 相关发布者确认和返回 以获取更多信息。
监听器容器工厂改进
您现在可以使用监听器容器工厂创建任何监听器容器,而不仅仅是那些与 @RabbitListener
注解或 @RabbitListenerEndpointRegistry
一起使用的容器。请参阅 使用容器工厂 以获取更多信息。
ChannelAwareMessageListener
现在继承自 MessageListener
。
代理事件监听器
引入了 BrokerEventListener
用于将选定的代理事件发布为 ApplicationEvent
实例。请参阅 代理事件监听器 以获取更多信息。
RabbitAdmin 变更
RabbitAdmin
会发现 Declarables
类型的 Bean(它是 Declarable
- Queue
、Exchange
和 Binding
对象的容器),并在代理上声明包含的对象。不鼓励用户使用声明 <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
)。有关更多信息,请参阅管理 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
。
监听器容器更改
默认的ConditionalRejectingErrorHandler
现在会完全丢弃如果存在x-death
标头则导致致命错误的消息。有关更多信息,请参阅异常处理。
立即重新入队
引入了一个新的ImmediateRequeueAmqpException
来通知监听器容器必须重新入队消息。为了使用此功能,添加了一个新的ImmediateRequeueMessageRecoverer
实现。
有关更多信息,请参阅消息监听器和异步情况。