1.5 相较于 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 来确定将转换为 String 而不是 DataInputStreamLongString 的最大长度。转换器有一个替代构造函数,它将该值作为限制。以前,此限制硬编码为 1024 字节。(在 1.4.4 中也可用)。

@RabbitListener 改进

@QueueBinding 用于 @RabbitListener

@RabbitListener 注解中添加了bindings 属性,它与queues 属性互斥,允许指定queue、其exchangebinding,以便由 Broker 上的 RabbitAdmin 进行声明。

@SendTo 中的 SpEL

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

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

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

更多信息,请参见 基于注解的监听器端点

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

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

RabbitTemplate 的更改

添加 reply-address

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

阻塞式 receive 方法

RabbitTemplate 现在支持 receiveconvertAndReceive 方法的阻塞功能。更多信息,请参见 轮询消费者

sendAndReceive 方法中的强制标志 (mandatory)

当使用 sendAndReceiveconvertSendAndReceive 方法时设置了mandatory 标志,如果无法传递请求消息,则调用线程会抛出 AmqpMessageReturnedException 异常。更多信息,请参见 回复超时

不正确的回复监听器配置

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

更多信息,请参见 回复监听器容器

添加 RabbitManagementTemplate

引入了 RabbitManagementTemplate,可以使用其提供的 REST API 来监控和配置 RabbitMQ Broker 管理插件。更多信息,请参见 [management-rest-api]

监听器容器 Bean 名称 (XML)

<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 提供BackOff 实例,以进行consumer 启动恢复。更多信息,请参见 消息监听器容器配置

通道关闭日志记录

引入了一种控制通道关闭日志级别的机制。请参见 通道关闭日志记录

应用程序事件

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

消费者标签配置

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

使用 MessageListenerAdapter

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

添加 LocalizedQueueConnectionFactory

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

匿名队列命名

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