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

spring-erlang 不再支持

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

CachingConnectionFactory 的变化

CachingConnectionFactory 中的空地址属性

此前,如果连接工厂配置了主机和端口,但 addresses 参数也提供了空字符串,则主机和端口会被忽略。现在,空 addresses 字符串的处理方式与 null 相同,会使用主机和端口。

URI 构造函数

CachingConnectionFactory 新增了一个带 URI 参数的构造函数,用于配置 broker 连接。

连接重置

新增了一个名为 resetConnection() 的方法,允许用户重置连接(或多个连接)。例如,在故障转移到备用 broker 后,可以使用此方法重新连接到主 broker。这影响进行中的操作。现有的 destroy() 方法功能完全相同,但新方法的名称不那么令人望而却步。

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

监听器容器消费者启动时,会尝试被动声明队列,以确保它们在 broker 上可用。此前,如果这些声明失败(例如,因为队列不存在)或高可用 (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

bindings 属性已添加到 @RabbitListener 注解中,与 queues 属性互斥,用于指定 queue、其 exchangebinding,以便由 RabbitAdmin 在 Broker 上声明。

@SendTo 中的 SpEL

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

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

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

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

Exchange、Queue 和 Binding 的自动声明

现在可以声明定义这些实体集合的 bean,并且 RabbitAdmin 在建立连接时会将这些内容添加到它声明的实体列表中。更多信息请参见 声明 Exchange、Queue 和 Binding 集合

RabbitTemplate 的变化

新增 reply-address

reply-address 属性已添加到 <rabbit-template> 组件中,作为 reply-queue 的替代项。更多信息请参见 请求/回复消息。(在 1.4.4 版本中也作为 RabbitTemplate 的 setter 提供)。

阻塞 receive 方法

RabbitTemplate 现在支持在 receiveconvertAndReceive 方法中进行阻塞。更多信息请参见 轮询消费者

sendAndReceive 方法中的 Mandatory 标志

在使用 sendAndReceiveconvertSendAndReceive 方法时设置 mandatory 标志后,如果请求消息无法送达,调用线程将抛出 AmqpMessageReturnedException。更多信息请参见 回复超时

不正确的回复监听器配置

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

参见 回复监听器容器 了解更多信息。

新增 RabbitManagementTemplate

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

监听器容器 Bean 名称 (XML)

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

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

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

但是,为了支持将容器作为一组进行启动和停止,新增了一个 group 属性。定义此属性时,由该元素创建的容器将被添加到名为此名称的 bean 中,其类型为 Collection<SimpleMessageListenerContainer>。您可以遍历此组来启动和停止容器。

类级别的 @RabbitListener

@RabbitListener 注解现在可以应用于类级别。结合新的 @RabbitHandler 方法注解,这允许您根据 payload 类型选择处理方法。更多信息请参见 多方法监听器

SimpleMessageListenerContainer:BackOff 支持

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

Channel 关闭日志记录

引入了一种控制 channel 关闭日志级别 的机制。参见 记录 Channel 关闭事件

应用事件

SimpleMessageListenerContainer 现在在消费者失败时发出应用事件。更多信息请参见 消费者事件

消费者标签配置

此前,异步消费者的消费者标签由 broker 生成。在此版本中,现在可以向监听器容器提供命名策略。参见 消费者标签

使用 MessageListenerAdapter

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

新增 LocalizedQueueConnectionFactory

LocalizedQueueConnectionFactory 是一种新的连接工厂,用于连接到集群中实际驻留镜像队列的节点。

匿名队列命名

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