此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
自 2.0 以来 2.1 中的更改
AMQP 客户端库
Spring AMQP 现在使用 5.4.x 版本的amqp-client
库。
默认情况下,此客户端配置了自动恢复。
请参阅 RabbitMQ 自动连接/拓扑恢复。
从版本 4.0 开始,客户端默认启用自动恢复。
虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。
我们建议禁用amqp-client 自动恢复,以避免AutoRecoverConnectionNotCurrentlyOpenException 代理可用但连接尚未恢复的实例。
从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式地创建自己的 RabbitMQ 连接工厂并将其提供给CachingConnectionFactory .
RabbitMQ 函数ConnectionFactory 由RabbitConnectionFactoryBean 默认情况下,也禁用了该选项。 |
套件更改
某些类已移至不同的包。
大多数是内部类,不会影响用户应用程序。
两个例外是ChannelAwareMessageListener
和RabbitListenerErrorHandler
.
这些接口现在位于org.springframework.amqp.rabbit.listener.api
.
发布者确认更改
当存在未完成的确认时,启用了发布者确认的通道不会返回到缓存中。 有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。
Listener Container Factory 改进
现在,您可以使用侦听器容器工厂创建任何侦听器容器,而不仅仅是那些用于@RabbitListener
annotations 或@RabbitListenerEndpointRegistry
.
有关更多信息,请参阅使用容器工厂。
ChannelAwareMessageListener
现在继承自MessageListener
.
Broker 事件侦听器
一个BrokerEventListener
用于将选定的代理事件发布为ApplicationEvent
实例。
有关更多信息,请参阅 Broker Event Listener。
RabbitAdmin 更改
这RabbitAdmin
发现 bean 类型的Declarables
(这是Declarable
- Queue
,Exchange
和Binding
对象)并在代理上声明包含的对象。
不建议用户使用旧的声明机制<Collection<Queue>>
(和其他) 并且应该使用Declarables
beans 来代替。
默认情况下,旧机制处于禁用状态。
有关更多信息,请参见Declaring Collections of Exchanges, Queues, and Bindings。
AnonymousQueue
实例现在使用x-queue-master-locator
设置为client-local
默认情况下,确保在应用程序连接到的节点上创建队列。
有关更多信息,请参阅 配置 Broker。
RabbitTemplate 更改
您现在可以配置RabbitTemplate
使用noLocalReplyConsumer
选项来控制noLocal
标志sendAndReceive()
操作。
有关更多信息,请参阅请求/回复消息。
CorrelationData
对于发布者确认,现在有一个ListenableFuture
,您可以使用它来获取确认,而不是使用回调。
启用返回和确认后,关联数据(如果提供)将填充返回的消息。
有关更多信息,请参阅 Correlated Publisher Confirms and Returns 。
一个名为replyTimedOut
现在提供以通知子类 Reply 已超时,从而允许进行任何状态清理。
有关更多信息,请参阅 Reply Timeout (回复超时)。
您现在可以指定ErrorHandler
在将 request/reply 与DirectReplyToMessageListenerContainer
(默认值)在传递回复时发生异常(例如,延迟回复)。
看setReplyErrorHandler
在RabbitTemplate
.
(也是从 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
methods 现在可以返回ListenableFuture<?>
或Mono<?>
.
看异步@RabbitListener
返回类型了解更多信息。
连接工厂 Bean 更改
默认情况下,RabbitConnectionFactoryBean
现在调用enableHostnameVerification()
.
要恢复到之前的行为,请将enableHostnameVerification
property 设置为false
.
连接工厂更改
这CachingConnectionFactory
现在无条件地在底层 RabbitMQ 中禁用自动恢复ConnectionFactory
,即使构造函数中提供了预配置的实例。
虽然已经采取了步骤使 Spring AMQP 与自动恢复兼容,但出现了某些极端情况,问题仍然存在。
Spring AMQP 从 1.0.0 开始就有了自己的恢复机制,不需要使用 Client 端提供的恢复。
虽然仍然可以启用该功能(使用cachingConnectionFactory.getRabbitConnectionFactory()
.setAutomaticRecoveryEnabled()
) 在CachingConnectionFactory
构造的,我们强烈建议您不要这样做。
我们建议您使用单独的 RabbitMQConnectionFactory
如果在直接使用 Client 端工厂(而不是使用 Spring AMQP 组件)时需要自动恢复连接。
侦听器容器更改
默认的ConditionalRejectingErrorHandler
现在,如果x-death
标头。
有关更多信息,请参阅异常处理。
立即重新排队
新的ImmediateRequeueAmqpException
用于通知侦听器容器消息必须重新排队。
要使用此功能,需要新的ImmediateRequeueMessageRecoverer
implementation 的 implementation 中。
有关更多信息,请参见 Message Listeners and the Asynchronous Case。