Changes in 1.5 Since 1.4

  • 弃用spring-erlang jar,建议使用management-rest-api。

  • CachingConnectionFactory对空"addresses"属性的处理方式进行了更改。

  • 添加了新的构造函数,允许使用URI配置代理连接。

  • 引入了resetConnection()方法,用于重置连接。

  • 侦听器容器队列声明行为的属性可配置。

  • RabbitGatewaySupport类已移动到新的软件包。

  • 改进了DefaultMessagePropertiesConverter,允许配置转换为String的LongString的最大长度。

  • 增强了@RabbitListener注解,支持queue binding规范和SpEL表达式。

  • 可以通过Bean声明交换机、队列和绑定集合,并由RabbitAdmin自动声明。

  • RabbitTemplate支持在receive方法中进行阻塞。

  • 引入RabbitManagementTemplate,用于通过REST API监视和配置RabbitMQ代理。

  • 改进了@RabbitListener,支持类级别注解和多方法侦听器。

  • SimpleMessageListenerContainer增加了对BackOff支持。

spring-erlang Is No Longer Supported

不再在发行版中包含 spring-erlang jar。请改用 management-rest-api

CachingConnectionFactory Changes

Empty Addresses Property in CachingConnectionFactory

此前,如果连接工厂被配置为具有主机和端口但同时也为“addresses”提供了一个空字符串,则会忽略主机和端口。现在,一个空的“addresses”字符串被视为与“null”相同,并且使用了主机和端口。

URI Constructor

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

Connection Reset

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

Properties to Control Container Queue Declaration Behavior

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

declarationRetriesfailedDeclarationRetryIntervalretryDeclarationInterval 属性现在可配置。请参阅 Message Listener Container Configuration 了解更多信息。

Class Package Change

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

DefaultMessagePropertiesConverter Changes

您现在可以配置 DefaultMessagePropertiesConverter 以确定转换为 String 而不是 DataInputStreamLongString 的最大长度。该转换器有一个替代构造函数,它将该值作为限制。此前,此限制以硬编码方式设置为 1024 字节。(1.4.4 中也可用)。

@RabbitListener Improvements

@QueueBinding for @RabbitListener

bindings 属性已添加到 @RabbitListener 注解中,作为与 queues 属性互斥的,以允许规范要由 RabbitAdmin 在代理上声明的 queue、它的 exchangebinding

SpEL in @SendTo

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

Multiple Queue Names through Properties

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

请参阅 Annotation-driven Listener Endpoints 了解更多信息。

Automatic Exchange, Queue, and Binding Declaration

您现在可以声明定义这些实体的集合的 Bean,且 RabbitAdmin 会在连接建立时将内容添加到新声明的实体列表中。有关详细信息,请参见 Declaring Collections of Exchanges, Queues, and Bindings

RabbitTemplate Changes

reply-address Added

reply-address 属性已被添加到 <rabbit-template> 组件作为替代 reply-queue。请参阅 Request/Reply Messaging 了解更多信息。(在 1.4.4 中也可以在 RabbitTemplate 上使用设置器)。

Blocking receive Methods

RabbitTemplate 现在支持 receiveconvertAndReceive 方法中的阻塞。请参阅 Polling Consumer 了解更多信息。

Mandatory with sendAndReceive Methods

在使用 sendAndReceiveconvertSendAndReceive 方法时如果设置了 mandatory 标志,那么如果无法传递请求消息,则调用线程将抛出 AmqpMessageReturnedException。有关详细信息,请参见 Reply Timeout

Improper Reply Listener Configuration

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

有关详细信息,请参见 Reply Listener Container

RabbitManagementTemplate Added

已引入 RabbitManagementTemplate 来通过其 management plugin 提供的 REST API 监视和配置 RabbitMQ 经纪人。请参阅 [management-rest-api] 了解更多信息。

Listener Container Bean Names (XML)

<listener-container/> 元素上的 id 属性已删除。从这个版本开始,<listener/> 子元素上的 id 单独用于命名为每个侦听器元素创建的侦听器容器 Bean。 应用常规 Spring Bean 名称覆盖。如果解析到一个与现有 Bean 相同 id 的后续 <listener/>,则新定义将覆盖现有定义。此前,Bean 名称是从 <listener-container/><listener/> 元素的 id 属性组合而成的。 迁移到此版本时,如果 <listener-container/> 元素上有 id 属性,请将其删除,而对子 <listener/> 元素设置 id

但是,为了支持将容器作为一组进行启动和停止,已添加新的 group 属性。当定义此属性时,此元素创建的容器将添加到名称与此相同、类型为 Collection<SimpleMessageListenerContainer> 的 Bean 中。您可以遍历此组来启动和停止容器。

Class-Level @RabbitListener

现在可以在类级别应用 @RabbitListener 注释。与新的 @RabbitHandler 方法注释结合使用时,您可以根据有效负载类型选择处理程序方法。请参阅 Multi-method Listeners 了解更多信息。

SimpleMessageListenerContainer: BackOff Support

现在可以通过 BackOff 实例向 SimpleMessageListenerContainer 提供 consumer 启动恢复。有关详细信息,请参阅 Message Listener Container Configuration

Channel Close Logging

已经引入了控制通道关闭日志级别的机制。请参阅 Channel Close Logging

Application Events

现在,当消费者失败时,SimpleMessageListenerContainer 将发出应用程序事件。有关详细信息,请参阅 Consumer Events

Consumer Tag Configuration

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

Using MessageListenerAdapter

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

LocalizedQueueConnectionFactory Added

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

Anonymous Queue Naming

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