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