2.1 版本相对于 2.0 版本的变更
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的 5.4.x 版本的 amqp-client
库。此客户端默认配置了自动恢复。请参阅 RabbitMQ 自动连接/拓扑恢复。
自 4.0 版本起,客户端默认启用自动恢复。虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端的恢复功能。我们建议禁用 amqp-client 的自动恢复,以避免在 broker 可用但连接尚未恢复时出现 AutoRecoverConnectionNotCurrentlyOpenException 实例。从 1.7.1 版本开始,除非您明确创建自己的 RabbitMQ 连接工厂并将其提供给 CachingConnectionFactory ,否则 Spring AMQP 会禁用此功能。由 RabbitConnectionFactoryBean 创建的 RabbitMQ ConnectionFactory 实例也默认禁用了此选项。 |
包变更
某些类已移至不同的包中。大多数是内部类,不影响用户应用。两个例外是 ChannelAwareMessageListener
和 RabbitListenerErrorHandler
。这些接口现在位于 org.springframework.amqp.rabbit.listener.api
包中。
Publisher Confirms 变更
为 publisher confirmations 启用的 Channel 在存在未确认的消息时不会返回到缓存中。请参阅 Correlated Publisher Confirms and Returns 以获取更多信息。
监听器容器工厂改进
现在您可以使用监听器容器工厂来创建任何监听器容器,而不仅限于与 @RabbitListener
注解或 @RabbitListenerEndpointRegistry
一起使用的容器。请参阅 使用容器工厂 以获取更多信息。
ChannelAwareMessageListener
现在继承自 MessageListener
。
Broker 事件监听器
引入了 BrokerEventListener
,用于将选定的 broker 事件作为 ApplicationEvent
实例发布。请参阅 Broker 事件监听器 以获取更多信息。
RabbitAdmin 变更
RabbitAdmin
会发现类型为 Declarables
的 bean(它是 Declarable
- Queue
、Exchange
和 Binding
对象的容器),并在 broker 上声明包含的对象。不鼓励用户使用旧的声明 <Collection<Queue>>
(及其他)的机制,而应改用 Declarables
bean。默认情况下,旧机制已禁用。请参阅 声明 Exchange、Queue 和 Binding 的集合 以获取更多信息。
AnonymousQueue
实例现在默认声明时将 x-queue-master-locator
设置为 client-local
,以确保队列在应用连接的节点上创建。请参阅 配置 Broker 以获取更多信息。
RabbitTemplate 变更
现在您可以为 RabbitTemplate
配置 noLocalReplyConsumer
选项,以控制 sendAndReceive()
操作中回复消费者的 noLocal
标志。请参阅 请求/回复消息 以获取更多信息。
用于 publisher confirmations 的 CorrelationData
现在具有 ListenableFuture
,您可以使用它来获取确认,而不是使用回调。当启用 returns 和 confirmations 时,如果提供了 correlation data,则会填充返回的消息。请参阅 Correlated Publisher Confirms and Returns 以获取更多信息。
现在提供了一个名为 replyTimedOut
的方法,用于通知子类回复已超时,以便进行任何状态清理。请参阅 回复超时 以获取更多信息。
现在,在使用带有 DirectReplyToMessageListenerContainer
(默认)的请求/回复时,如果回复送达时发生异常(例如,延迟回复),您可以指定要调用的 ErrorHandler
。请参阅 RabbitTemplate
上的 setReplyErrorHandler
。(也从 2.0.11 版本开始)
消息转换
我们引入了一个新的 Jackson2XmlMessageConverter
来支持消息在 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
。
监听器容器变更
默认的 ConditionalRejectingErrorHandler
现在会在存在 x-death
header 时完全丢弃导致致命错误的消息。请参阅 异常处理 以获取更多信息。
立即重新入队
引入了一个新的 ImmediateRequeueAmqpException
来通知监听器容器消息需要重新入队。为了使用此功能,添加了一个新的 ImmediateRequeueMessageRecoverer
实现。
请参阅 消息监听器和异步情况 以获取更多信息。