1.2 相对于 1.1 的变化

RabbitMQ 版本

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

Rabbit 管理员

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

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

Rabbit 模板

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

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

JSON 消息转换器

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

队列及其他项的自动声明

此前,在声明队列、交换器和绑定时,您无法定义用于声明的连接工厂。 每个 RabbitAdmin 都通过其连接声明所有组件。

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

AMQP 远程调用

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

请求的心跳

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