此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

自 1.7 以来 2.0 的变化

CachingConnectionFactory

从 2.0.2 版开始,您可以配置RabbitTemplate使用与侦听器容器使用的连接不同的连接。此更改可避免生产者因任何原因被阻止时死锁的使用者。有关更多信息,请参阅使用单独的连接spring-doc.cadn.net.cn

AMQP 客户端库

Spring AMQP 现在使用新的 5.0.x 版本的amqp-clientRabbitMQ 团队提供的库。该客户端默认配置了自动恢复。参见 RabbitMQ 自动连接/拓扑恢复spring-doc.cadn.net.cn

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

一般更改

ExchangeBuilder现在默认构建持久交换。 这@Exchange注释@QeueueBinding默认情况下还声明持久交换。 这@Queue注释@RabbitListener默认情况下,如果命名,则声明持久队列,如果匿名,则声明非持久队列。有关更多信息,请参阅队列和交换的构建器 API 和注释驱动的侦听器端点spring-doc.cadn.net.cn

已删除的类

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

新监听器容器

DirectMessageListenerContainer已添加到现有的SimpleMessageListenerContainer. 有关选择要使用的容器以及如何配置它们的信息,请参阅选择容器消息侦听器容器配置spring-doc.cadn.net.cn

Log4j 附加器

由于 log4j 的生命周期结束,此附加器不再可用。有关可用日志附加器的信息,请参阅日志记录子系统 AMQP 附加器spring-doc.cadn.net.cn

RabbitTemplate变化

以前,非事务性RabbitTemplate如果现有事务在事务侦听器容器线程上运行,则参与了该事务。这是一个严重的错误。但是,用户可能依赖于此行为。从版本 1.6.2 开始,您必须将channelTransactedboolean 以使其参与容器事务。

RabbitTemplate现在使用DirectReplyToMessageListenerContainer(默认情况下),而不是为每个请求创建一个新的使用者。有关更多信息,请参阅 RabbitMQ 直接回复spring-doc.cadn.net.cn

AsyncRabbitTemplate现在支持直接回复。有关更多信息,请参阅异步兔子模板。spring-doc.cadn.net.cn

RabbitTemplateAsyncRabbitTemplate现在有receiveAndConvertconvertSendAndReceiveAsType采用ParameterizedTypeReference<T>参数,让调用者指定要将结果转换为的类型。这对于复杂类型或未在消息头中传达类型信息时特别有用。它需要一个SmartMessageConverter例如Jackson2JsonMessageConverter. 请参阅请求/回复消息传递异步兔子模板MessageRabbitTemplateMessageRabbitTemplate了解更多信息。spring-doc.cadn.net.cn

您现在可以使用RabbitTemplate在专用通道上执行多个作。有关更多信息,请参阅作用域作。spring-doc.cadn.net.cn

侦听器适配器

一个方便的FunctionalInterface可用于将 lambda 与MessageListenerAdapter. 看MessageListenerAdapter了解更多信息。spring-doc.cadn.net.cn

侦听器容器更改

预取默认值(Prefetch Default Value)

预取默认值过去为 1,这可能导致高效使用者的利用率不足。默认预取值现在为 250,这应该会让使用者在大多数常见方案中保持忙碌,并且,因此,提高吞吐量。spring-doc.cadn.net.cn

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

有关预取的更多背景信息,请参阅这篇关于 RabbitMQ 中消费者利用率的文章和这篇关于排队理论的文章。spring-doc.cadn.net.cn

消息计数

以前MessageProperties.getMessageCount()返回0用于容器发出的消息。 此属性仅适用于使用basicGet(例如,从RabbitTemplate.receive()方法),现在初始化为null用于容器消息。spring-doc.cadn.net.cn

事务回滚行为

事务回滚时的消息重新排队现在是一致的,无论是否配置了事务管理器。 有关更多信息,请参阅有关回滚已接收消息的说明spring-doc.cadn.net.cn

关机行为

如果容器线程在shutdownTimeout,则通道默认强制关闭。 有关详细信息,请参阅消息侦听器容器配置spring-doc.cadn.net.cn

接收后消息后处理器

如果MessagePostProcessorafterReceiveMessagePostProcessors属性返回null,则该消息将被丢弃(并在适当的情况下确认)。spring-doc.cadn.net.cn

连接工厂更改

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

一个新的ConnectionNameStrategy现在提供了从AbstractConnectionFactory. 有关详细信息,请参阅连接和资源管理spring-doc.cadn.net.cn

重试更改

MissingMessageIdAdvice不再提供。 它的功能现在是内置的。 有关详细信息,请参阅同步作中的失败和重试选项spring-doc.cadn.net.cn

匿名队列命名

默认情况下,AnonymousQueues现在使用默认的Base64UrlNamingStrategy而不是简单的UUID字符串。 看AnonymousQueue了解更多信息。spring-doc.cadn.net.cn

@RabbitListener变化

您现在可以在@RabbitListener附注。 有关更多信息,请参阅注释驱动的侦听器端点spring-doc.cadn.net.cn

您现在可以配置@RabbitListener注释,以便将任何异常返回给发送方。 您还可以配置RabbitListenerErrorHandler处理异常。 有关详细信息,请参阅处理异常spring-doc.cadn.net.cn

现在,当您使用@QueueBinding注解。 也@QueueBinding.exchange()现在支持自定义交换类型,并默认声明持久交换。spring-doc.cadn.net.cn

现在,您可以将concurrency在注释级别的侦听器容器,而不必为不同的并发设置配置不同的容器工厂。spring-doc.cadn.net.cn

现在,您可以将autoStartup属性,覆盖容器工厂中的默认设置。spring-doc.cadn.net.cn

现在可以设置接收后和发送(回复)前MessagePostProcessor实例中的RabbitListener集装箱工厂。spring-doc.cadn.net.cn

有关更多信息,请参阅注释驱动的侦听器端点spring-doc.cadn.net.cn

从 2.0.3 版本开始,其中一个@RabbitHandler类级别的注释@RabbitListener可以指定为默认值。 有关更多信息,请参阅多方法侦听器spring-doc.cadn.net.cn

容器条件回滚

使用外部事务管理器(例如 JDBC)时,当您向容器提供事务属性时,现在支持基于规则的回滚。 当您使用交易建议时,它现在也更加灵活。 有关更多信息,请参阅条件回滚spring-doc.cadn.net.cn

删除 Jackson 1.x 支持

在以前的版本中已弃用,Jackson1.x转换器和相关组件现已被删除。 您可以使用基于 Jackson 2.x 的类似组件。 看Jackson2JsonMessageConverter了解更多信息。spring-doc.cadn.net.cn

JSON 消息转换器

TypeId设置为Hashtable对于入站 JSON 消息,默认转换类型现在为LinkedHashMap. 以前,它是Hashtable. 要恢复到Hashtable,您可以使用setDefaultMapTypeDefaultClassMapper.spring-doc.cadn.net.cn

XML 解析器

解析时QueueExchangeXML 组件时,解析器不再注册name属性值作为 Bean 别名,如果id属性存在。 看关于idname属性了解更多信息。spring-doc.cadn.net.cn

被阻止的连接

您现在可以注入com.rabbitmq.client.BlockedListener进入org.springframework.amqp.rabbit.connection.Connection对象。 此外,ConnectionBlockedEventConnectionUnblockedEvent事件由ConnectionFactory当连接被 Broker 阻止或取消阻止时。spring-doc.cadn.net.cn

有关详细信息,请参阅连接和资源管理spring-doc.cadn.net.cn