跳到主要内容

自 1.1 版本以来的 1.2 版本变更

DeepSeek V3 中英对照 Changes to 1.2 Since 1.1

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 中提供对其的引用。