跳到主要内容
版本:3.2.3

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 秒间隔内重试缺失的队列。

declarationRetries、failedDeclarationRetryInterval 和 retryDeclarationInterval 属性现在可配置。更多信息请参阅 消息监听容器配置。

类包变更​

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 现在支持在 receive 和 convertAndReceive 方法中进行阻塞。更多信息请参见 Polling Consumer。

使用 sendAndReceive 方法的强制性​

当在使用 sendAndReceive 和 convertSendAndReceive 方法时设置了 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。