跳到主要内容

1.5 版本相对于 1.4 版本的变更

DeepSeek V3 中英对照 Changes in 1.5 Since 1.4

spring-erlang 不再受支持

spring-erlang jar 不再包含在发行版中。请改用 RabbitMQ REST API

CachingConnectionFactory 的变更

CachingConnectionFactory 中的空地址属性

之前,如果连接工厂配置了主机和端口,但同时也为 addresses 提供了一个空字符串,那么主机和端口会被忽略。现在,空的 addresses 字符串将被视为 null,并且会使用主机和端口。

URI 构造函数

CachingConnectionFactory 有一个额外的构造函数,带有一个 URI 参数,用于配置代理连接。

连接重置

新增了一个名为 resetConnection() 的方法,允许用户重置连接(或多个连接)。例如,您可以在故障转移到备用代理后使用此方法重新连接到主代理。此方法确实会影响正在进行的操作。现有的 destroy() 方法执行完全相同的操作,但新方法的名称不那么令人生畏。

控制容器队列声明行为的属性

当监听器容器的消费者启动时,它们会尝试被动声明队列,以确保这些队列在代理上可用。以前,如果这些声明失败(例如,因为队列不存在)或在 HA 队列正在移动时,重试逻辑固定为三次尝试,每次间隔五秒。如果队列仍然不存在,则行为由 missingQueuesFatal 属性控制(默认值:true)。此外,对于配置为监听多个队列的容器,如果只有一部分队列可用,消费者会在固定的 60 秒间隔内重试缺失的队列。

declarationRetriesfailedDeclarationRetryIntervalretryDeclarationInterval 属性现在可配置。更多信息请参阅 消息监听容器配置

类包变更

RabbitGatewaySupport 类已从 o.s.amqp.rabbit.core.support 移动到 o.s.amqp.rabbit.core

DefaultMessagePropertiesConverter 的变更

你现在可以配置 DefaultMessagePropertiesConverter 来决定将 LongString 转换为 String 而不是 DataInputStream 的最大长度。该转换器提供了一个替代构造函数,该构造函数接受一个值作为限制。以前,这个限制是硬编码为 1024 字节的。(在 1.4.4 版本中也适用)。

@RabbitListener 的改进

@QueueBinding 用于 @RabbitListener

@RabbitListener 注解中新增了 bindings 属性,该属性与 queues 属性互斥,用于指定 queue、其 exchange 以及 binding,以便由 RabbitAdmin 在 Broker 上进行声明。

@SendTo 中的 SpEL

@RabbitListener 的默认回复地址(@SendTo)现在可以是一个 SpEL 表达式。

通过属性指定多个队列名称

现在,您可以使用 SpEL 和属性占位符的组合来为监听器指定多个队列。

更多信息请参见注解驱动的监听器端点

自动交换、队列和绑定声明

现在你可以声明定义这些实体的集合的 beans,当连接建立时,RabbitAdmin 会将其内容添加到它声明的实体列表中。更多信息请参见声明交换器、队列和绑定的集合

RabbitTemplate 的变更

reply-address 已添加

<rabbit-template> 组件新增了 reply-address 属性,作为 reply-queue 的替代选项。更多信息请参阅 请求/回复消息。(在 1.4.4 版本中,RabbitTemplate 也提供了相应的 setter 方法)。

阻塞 receive 方法

RabbitTemplate 现在支持在 receiveconvertAndReceive 方法中进行阻塞。更多信息请参见 Polling Consumer

使用 sendAndReceive 方法的强制性

当在使用 sendAndReceiveconvertSendAndReceive 方法时设置了 mandatory 标志,如果请求消息无法传递,调用线程将抛出 AmqpMessageReturnedException。有关更多信息,请参阅回复超时

不正确的回复监听器配置

该框架在使用命名回复队列时,会尝试验证回复监听器容器的正确配置。

有关更多信息,请参阅 回复监听器容器

RabbitManagementTemplate 新增

RabbitManagementTemplate 已被引入,用于通过 RabbitMQ 的 管理插件 提供的 REST API 来监控和配置 RabbitMQ Broker。更多信息请参见 RabbitMQ REST API

监听器容器 Bean 名称(XML)

important

<listener-container/> 元素上的 id 属性已被移除。从本版本开始,仅使用 <listener/> 子元素上的 id 来命名每个监听器元素创建的监听器容器 bean。

应用了常规的 Spring bean 名称覆盖规则。如果后续解析的 <listener/> 与现有 bean 的 id 相同,则新定义将覆盖现有定义。以前,bean 名称由 <listener-container/><listener/> 元素的 id 属性组合而成。

在迁移到此版本时,如果你的 <listener-container/> 元素上有 id 属性,请将其移除,并在子元素 <listener/> 上设置 id

然而,为了支持以组的形式启动和停止容器,新增了一个 group 属性。当定义了此属性时,由该元素创建的容器会被添加到一个以此名称命名的 bean 中,该 bean 的类型为 Collection<SimpleMessageListenerContainer>。你可以遍历这个组来启动和停止容器。

类级别的 @RabbitListener

@RabbitListener 注解现在可以应用于类级别。结合新的 @RabbitHandler 方法注解,您可以根据负载类型选择处理程序方法。有关更多信息,请参阅 多方法监听器

SimpleMessageListenerContainer: 回退支持

SimpleMessageListenerContainer 现在可以为 consumer 启动恢复提供一个 BackOff 实例。更多信息请参见 消息监听器容器配置

通道关闭日志

引入了一种机制来控制通道关闭的日志级别。详情请参阅 记录通道关闭事件

应用事件

SimpleMessageListenerContainer 现在会在消费者失败时发出应用程序事件。有关更多信息,请参阅 消费者事件

消费者标签配置

之前,异步消费者的消费者标签(consumer tags)是由 broker 生成的。在此版本中,现在可以为监听容器提供一个命名策略。详情请参阅 Consumer Tags

使用 MessageListenerAdapter

MessageListenerAdapter 现在支持一个队列名称(或消费者标签)到方法名称的映射,以便根据接收消息的队列确定要调用的委托方法。

LocalizedQueueConnectionFactory 已添加

LocalizedQueueConnectionFactory 是一种新的连接工厂,它连接到集群中实际存放镜像队列的节点。

匿名队列命名

从 1.5.3 版本开始,你现在可以控制 AnonymousQueue 名称的生成方式。更多信息请参见 AnonymousQueue