自 1.1 版本以来的 1.2 版本变更
RabbitMQ 版本
Spring AMQP 现在默认使用 RabbitMQ 3.1.x(但仍保留与早期版本的兼容性)。针对 RabbitMQ 3.1.x 不再支持的功能,添加了一些弃用提示——包括联邦交换(federated exchanges)和 RabbitTemplate
上的 immediate
属性。
Rabbit Admin
RabbitAdmin
现在提供了一个选项,允许在声明失败时继续声明 exchange、queue 和 binding。在以前,一旦声明失败,所有声明都会停止。通过设置 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 调用的传输方式。更多信息请参见 使用 AMQP 的 Spring 远程调用。
请求的心跳
一些用户曾要求将底层客户端连接工厂的 requestedHeartBeats
属性暴露在 Spring AMQP 的 CachingConnectionFactory
上。现在这一功能已经实现。在此之前,必须将 AMQP 客户端工厂配置为一个单独的 bean,并在 CachingConnectionFactory
中提供对其的引用。