CachingConnectionFactory

从版本 2.0.2 开始,您可以将 配置为使用与侦听器容器使用的连接不同的连接。 此更改可避免在生产者因任何原因被阻止时陷入僵局。 有关详细信息,请参阅使用单独的连接RabbitTemplateSpring中文文档

AMQP 客户端库

Spring AMQP 现在使用 RabbitMQ 团队提供的新库 5.0.x 版本。 默认情况下,此客户端配置了自动恢复。 请参阅 RabbitMQ 自动连接/拓扑恢复amqp-clientSpring中文文档

从版本 4.0 开始,客户端默认启用自动恢复。 虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。 我们建议您禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。 从版本 1.7.1 开始,Spring AMQP 会禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给 . 默认情况下,由 创建的 RabbitMQ 实例也禁用了该选项。amqp-clientAutoRecoverConnectionNotCurrentlyOpenExceptionCachingConnectionFactoryConnectionFactoryRabbitConnectionFactoryBean
从版本 4.0 开始,客户端默认启用自动恢复。 虽然与此功能兼容,但 Spring AMQP 有自己的恢复机制,通常不需要客户端恢复功能。 我们建议您禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。 从版本 1.7.1 开始,Spring AMQP 会禁用它,除非您显式创建自己的 RabbitMQ 连接工厂并将其提供给 . 默认情况下,由 创建的 RabbitMQ 实例也禁用了该选项。amqp-clientAutoRecoverConnectionNotCurrentlyOpenExceptionCachingConnectionFactoryConnectionFactoryRabbitConnectionFactoryBean

一般更改

现在默认构建持久的交换。 默认情况下,a 中使用的注释还声明了持久交换。 默认情况下,在 中使用的注释声明了持久队列(如果是命名的),如果是非持久的(如果是匿名的)。 有关更多信息,请参阅用于队列和交换的构建器 API注释驱动的侦听器端点ExchangeBuilder@Exchange@QeueueBinding@Queue@RabbitListenerSpring中文文档

已删除的类

UniquelyNameQueue不再提供。 创建具有唯一名称的持久非自动删除队列是不寻常的。 此类已被删除。 如果需要其功能,请使用 .new Queue(UUID.randomUUID().toString())Spring中文文档

新建侦听器容器

已与现有的 . 有关选择要使用的容器以及如何配置容器的信息,请参阅选择容器消息侦听器容器配置DirectMessageListenerContainerSimpleMessageListenerContainerSpring中文文档

Log4j Appender

由于 log4j 的生命周期结束,此附加程序不再可用。 有关可用日志追加器的信息,请参阅日志记录子系统 AMQP 追加器Spring中文文档

RabbitTemplate变化

以前,如果现有事务在事务侦听器容器线程上运行,则非事务性事务会参与该事务。 这是一个严重的错误。 但是,用户可能依赖于此行为。 从版本 1.6.2 开始,您必须在模板上设置布尔值,以便它参与容器事务。RabbitTemplatechannelTransacted

现在使用(默认情况下)而不是为每个请求创建一个新的使用者。 有关更多信息,请参见 RabbitMQ Direct reply-toRabbitTemplateDirectReplyToMessageListenerContainerSpring中文文档

现在支持直接回复。 有关详细信息,请参阅异步兔子模板AsyncRabbitTemplateSpring中文文档

和 now have 和 方法采用参数,让调用方指定要将结果转换为的类型。 这对于复杂类型或未在消息标头中传达类型信息时特别有用。 它需要一个这样的 . 有关更多信息,请参阅请求/回复消息传递、异步 Rabbit 模板使用 RabbitTemplate消息转换[json-complex]。RabbitTemplateAsyncRabbitTemplatereceiveAndConvertconvertSendAndReceiveAsTypeParameterizedTypeReference<T>SmartMessageConverterJackson2JsonMessageConverterSpring中文文档

现在,您可以使用 a 在专用通道上执行多项操作。 有关详细信息,请参阅作用域内操作RabbitTemplateSpring中文文档

以前,如果现有事务在事务侦听器容器线程上运行,则非事务性事务会参与该事务。 这是一个严重的错误。 但是,用户可能依赖于此行为。 从版本 1.6.2 开始,您必须在模板上设置布尔值,以便它参与容器事务。RabbitTemplatechannelTransacted

侦听器适配器

方便地将 lambda 与 . 有关更多信息,请参见 MessageListenerAdapterFunctionalInterfaceMessageListenerAdapterSpring中文文档

侦听器容器更改

预取默认值

预取默认值过去为 1,这可能导致高效使用者的利用率不足。 默认预取值现在为 250,这应该会让使用者在最常见的场景中保持忙碌,并且, 因此,提高吞吐量。Spring中文文档

在某些情况下,预回迁值应 要低 - 例如,对于大型消息,尤其是在处理速度较慢的情况下(消息可能会加起来 到客户端进程中的大量内存),以及是否需要严格的消息排序 (在这种情况下,预取值应设置回 1)。 此外,对于低容量消息传递和多个使用者(包括单个侦听器容器实例中的并发性),您可能希望减少预取,以便在使用者之间更均匀地分配消息。

有关预取的更多背景信息,请参阅这篇关于 RabbitMQ 中消费者利用率的文章和这篇关于排队理论的文章。Spring中文文档

消息计数

以前,为容器发出的消息返回。 此属性仅在使用(例如,from 方法)时应用,现在已初始化为容器消息。MessageProperties.getMessageCount()0basicGetRabbitTemplate.receive()nullSpring中文文档

事务回滚行为

事务回滚时的消息重新排队现在是一致的,无论是否配置了事务管理器。 有关详细信息,请参阅有关回滚已接收邮件的注释Spring中文文档

关机行为

如果容器线程不响应 中的关闭,则默认情况下会强制关闭通道。 有关更多信息,请参阅消息侦听器容器配置shutdownTimeoutSpring中文文档

接收后消息后处理器

如果属性中的 返回 ,则丢弃该消息(并在适当时确认)。MessagePostProcessorafterReceiveMessagePostProcessorsnullSpring中文文档

在某些情况下,预回迁值应 要低 - 例如,对于大型消息,尤其是在处理速度较慢的情况下(消息可能会加起来 到客户端进程中的大量内存),以及是否需要严格的消息排序 (在这种情况下,预取值应设置回 1)。 此外,对于低容量消息传递和多个使用者(包括单个侦听器容器实例中的并发性),您可能希望减少预取,以便在使用者之间更均匀地分配消息。

连接工厂更改

连接和通道侦听器接口现在提供了一种获取异常信息的机制。 有关详细信息,请参阅连接和通道侦听器发布是异步的 — 如何检测成功和失败Spring中文文档

现在提供了一个新功能,用于从 . 有关详细信息,请参阅连接和资源管理ConnectionNameStrategyAbstractConnectionFactorySpring中文文档

重试更改

不再提供。 它的功能现在是内置的。 有关详细信息,请参阅同步操作中的失败和重试选项MissingMessageIdAdviceSpring中文文档

匿名队列命名

默认情况下,现在使用默认值而不是简单字符串命名。 有关详细信息,请参阅 AnonymousQueueAnonymousQueuesBase64UrlNamingStrategyUUIDSpring中文文档

@RabbitListener变化

现在,您可以在注释中提供简单的队列声明(仅绑定到默认交换)。 有关详细信息,请参阅注释驱动的侦听器端点@RabbitListenerSpring中文文档

现在,您可以配置批注,以便将任何异常返回给发送方。 您还可以配置 a 来处理异常。 有关详细信息,请参阅处理异常@RabbitListenerRabbitListenerErrorHandlerSpring中文文档

现在,在使用注释时,可以使用多个路由键绑定队列。 此外,现在还支持自定义交换类型,并默认声明持久交换。@QueueBinding@QueueBinding.exchange()Spring中文文档

现在,您可以在批注级别设置侦听器容器,而不必为不同的并发设置配置不同的容器工厂。concurrencySpring中文文档

现在,您可以在批注级别设置侦听器容器的属性,从而覆盖容器工厂中的默认设置。autoStartupSpring中文文档

现在,您可以在容器工厂中设置接收后和发送前(回复)实例。MessagePostProcessorRabbitListenerSpring中文文档

有关详细信息,请参阅注释驱动的侦听器端点Spring中文文档

从版本 2.0.3 开始,可以将类级别的注释之一指定为默认注释。 有关详细信息,请参阅多方法侦听器@RabbitHandler@RabbitListenerSpring中文文档

容器条件回滚

使用外部事务管理器(如 JDBC)时,现在支持在为容器提供事务属性时进行基于规则的回滚。 现在,当您使用交易建议时,它也更加灵活。 有关详细信息,请参阅条件回滚Spring中文文档

删除 Jackson 1.x 支持

在以前的版本中已弃用,Jackson 转换器和相关组件现已删除。 您可以使用基于 Jackson 2.x 的类似组件。 有关详细信息,请参阅 JSON 消息转换器1.xSpring中文文档

JSON 消息转换器

当 设置为入站 JSON 消息时,默认转换类型现在为 。 以前,它是. 要恢复为 ,可以在 上使用 。TypeIdHashtableLinkedHashMapHashtableHashtablesetDefaultMapTypeDefaultClassMapperSpring中文文档

XML 解析器

在解析和 XML 组件时,如果存在属性,则解析器不再将属性值注册为 Bean 别名。 有关详细信息,请参阅有关 idname 属性的注释QueueExchangenameidSpring中文文档

连接被阻止

您现在可以将 注入到对象中。 此外,当连接被代理阻止或取消阻止时,会发出 和 事件。com.rabbitmq.client.BlockedListenerorg.springframework.amqp.rabbit.connection.ConnectionConnectionBlockedEventConnectionUnblockedEventConnectionFactorySpring中文文档

有关详细信息,请参阅连接和资源管理Spring中文文档