2.1 相对于 2.0 的变更
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的 amqp-client
库的 5.4.x 版本。
此客户端默认配置了自动恢复功能。
请参阅 RabbitMQ 自动连接/拓扑恢复。
从 4.0 版本开始,客户端默认启用自动恢复。
虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。
我们建议禁用 |
包变更
某些类已移至不同的包。
大多数是内部类,不影响用户应用程序。
两个例外是 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。
默认情况下,旧机制是禁用的。
有关更多信息,请参阅 声明 Exchange、Queue 和 Binding 的集合。
AnonymousQueue
实例现在默认使用 x-queue-master-locator
设置为 client-local
进行声明,以确保队列在应用程序连接到的节点上创建。
有关更多信息,请参阅 配置代理。
RabbitTemplate 变更
您现在可以使用 noLocalReplyConsumer
选项配置 RabbitTemplate
,以控制 sendAndReceive()
操作中回复消费者(reply consumers)的 noLocal
标志。
有关更多信息,请参阅 请求/回复消息传递。
用于发布者确认的 CorrelationData
现在具有 ListenableFuture
,您可以使用它来获取确认,而不是使用回调。
当启用返回和确认时,如果提供了关联数据,则会填充返回的消息。
有关更多信息,请参阅 关联的发布者确认和返回。
现在提供了一个名为 replyTimedOut
的方法,用于通知子类回复已超时,从而允许进行任何状态清理。
有关更多信息,请参阅 回复超时。
现在可以指定一个 ErrorHandler
,当使用请求/回复与 DirectReplyToMessageListenerContainer
(默认)时,当回复传递时发生异常(例如,延迟回复)时调用。
请参阅 RabbitTemplate
上的 setReplyErrorHandler
。
(也从 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
方法现在可以返回 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
。
监听器容器变更
如果存在 x-death
头部,默认的 ConditionalRejectingErrorHandler
现在会完全丢弃导致致命错误的消息。
有关更多信息,请参阅 异常处理。
立即重新入队
引入了一个新的 ImmediateRequeueAmqpException
来通知监听器容器消息需要重新入队。
为了使用此功能,添加了一个新的 ImmediateRequeueMessageRecoverer
实现。
有关更多信息,请参阅 消息监听器和异步情况。