1.2 相比 1.1 的变化

RabbitMQ 版本

Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但保留与更早版本的兼容性)。已为 RabbitMQ 3.1.x 不再支持的特性添加了弃用标记——包括 federated exchanges(联合交换器)和 RabbitTemplate 上的 immediate 属性。

Rabbit Admin

RabbitAdmin 现在提供了一个选项,允许在声明失败时继续进行交换器、队列和绑定声明。之前,所有声明会在失败时停止。通过设置 ignore-declaration-exceptions,这些异常会被记录(在 WARN 级别),但后续声明会继续。这在例如队列声明因略微不同的 ttl 设置而失败时可能会很有用,因为通常这种情况会阻止其他声明的进行。

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

Rabbit Template

之前,当使用固定回复队列的 …​sendAndReceive() 方法时,会使用两个自定义头用于关联数据以及保留和恢复回复队列信息。从本版本开始,默认使用标准消息属性(correlationId),尽管您也可以指定一个自定义属性来代替。此外,嵌套的 replyTo 信息现在内部保留在模板中,而不是使用自定义头。

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

JSON 消息转换器

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

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

之前,在声明队列、交换器和绑定时,您无法定义使用哪个连接工厂进行声明。每个 RabbitAdmin 都使用其连接声明所有组件。

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

AMQP 远程调用

现在提供了使用 Spring 远程调用技术的功能,使用 AMQP 作为 RPC 调用的传输层。更多信息请参阅 使用 AMQP 进行 Spring 远程调用

请求的心跳

一些用户要求在 Spring AMQP 的 CachingConnectionFactory 上暴露底层客户端连接工厂的 requestedHeartBeats 属性。此功能现已可用。之前,需要将 AMQP 客户端工厂配置为单独的 bean,并在 CachingConnectionFactory 中提供对其的引用。