1.2 自 1.1 以来的变更
RabbitMQ 版本
Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但仍兼容更早版本)。对 RabbitMQ 3.1.x 不再支持的特性——联邦 exchange 和 RabbitTemplate 上的 immediate 属性——添加了相应废弃标注。
Rabbit Admin
RabbitAdmin 现在提供一个选项,让 exchange、队列和 binding 的声明在声明失败时继续进行。此前,所有声明在失败时都会停止。通过设置 ignore-declaration-exceptions,这类异常会被记录(WARN 级别),但后续声明继续进行。一个有用的例子是:当某个队列声明因 ttl 设置略有不同而失败、否则会阻止其他声明继续时。
RabbitAdmin 现在提供一个名为 getQueueProperties() 的额外方法。你可以用它确定 broker 上是否存在某个队列(不存在的队列返回 null)。此外,它还返回队列中当前的消息数以及当前的 consumer 数。
Rabbit Template
此前,当 …sendAndReceive() 方法与固定回复队列一起使用时,会使用两个自定义 header 来承载关联数据并保留/恢复回复队列信息。从本版本开始,默认使用标准消息属性(correlationId),不过你也可以指定改用自定义属性。此外,嵌套的 replyTo 信息现在在 template 内部保留,而不再使用自定义 header。
immediate 属性已废弃。使用 RabbitMQ 3.0.x 或更高版本时,不得设置此属性。
JSON 消息转换器
现在提供 Jackson 2.x 的 MessageConverter,以及现有的使用 Jackson 1.x 的转换器。
队列及其他元素的自动声明
此前,声明队列、exchange 和 binding 时,你无法指定用哪个连接工厂进行声明。每个 RabbitAdmin 都用自己的连接声明所有组件。
从本版本开始,现在可以将声明限定到特定的 RabbitAdmin 实例。参见条件声明。
AMQP 远程调用
现在提供使用 Spring 远程调用技术、以 AMQP 作为 RPC 调用传输的设施。更多信息参见用 AMQP 进行 Spring 远程调用。
请求的心跳
多位用户要求将底层客户端连接工厂的 requestedHeartBeats 属性暴露到 Spring AMQP 的 CachingConnectionFactory 上。现在已可用。此前,必须将 AMQP 客户端工厂配置为单独的 Bean,并在 CachingConnectionFactory 中提供对它的引用。