1.2 相较于 1.1 的更改

RabbitMQ 版本

Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但保留与早期版本的兼容性)。对于 RabbitMQ 3.1.x 不再支持的功能(联合交换和 `RabbitTemplate` 上的 `immediate` 属性),已添加一些弃用警告。

Rabbit Admin

RabbitAdmin 现在提供了一个选项,允许在声明失败时继续进行交换、队列和绑定的声明。以前,所有声明都会在发生故障时停止。通过设置 `ignore-declaration-exceptions`,此类异常将被记录(在 `WARN` 级别),但后续声明将继续进行。一个可能有用示例是,当队列声明由于略微不同的 `ttl` 设置而失败时,这将阻止其他声明继续进行。

RabbitAdmin 现在提供了一个名为 `getQueueProperties()` 的附加方法。您可以使用此方法确定队列是否存在于代理上(对于不存在的队列,返回 `null`)。此外,它还会返回队列中当前的消息数量以及当前的消费者数量。

Rabbit 模板

以前,当 `…​sendAndReceive()` 方法与固定回复队列一起使用时,使用两个自定义标头来进行关联数据,并保留和恢复回复队列信息。在此版本中,默认情况下使用标准消息属性(`correlationId`),尽管您可以指定要使用的自定义属性。此外,嵌套的 `replyTo` 信息现在保留在模板内部,而不是使用自定义标头。

`immediate` 属性已弃用。使用 RabbitMQ 3.0.x 或更高版本时,不得设置此属性。

JSON 消息转换器

现在提供了一个 Jackson 2.x `MessageConverter`,以及现有的使用 Jackson 1.x 的转换器。

队列和其他项目的自动声明

以前,在声明队列、交换和绑定时,无法定义用于声明的连接工厂。每个 `RabbitAdmin` 都使用其连接来声明所有组件。

从本版本开始,您现在可以将声明限制为特定的 `RabbitAdmin` 实例。请参阅 条件声明

AMQP 远程调用

现在提供了使用 Spring 远程调用技术的工具,使用 AMQP 作为 RPC 调用的传输方式。有关更多信息,请参阅 [远程调用]

请求心跳

一些用户要求在 Spring AMQP `CachingConnectionFactory` 上公开底层客户端连接工厂的 `requestedHeartBeats` 属性。此属性现在可用。以前,必须将 AMQP 客户端工厂配置为单独的 Bean,并在 `CachingConnectionFactory` 中提供对它的引用。