1.5 相对于 1.4 的变化

spring-erlang 不再受支持

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

CachingConnectionFactory 变化

CachingConnectionFactory 中空的 addresses 属性

以前,如果连接工厂配置了主机和端口,但 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 改进

@RabbitListener@QueueBinding

bindings 属性已添加到 @RabbitListener 注解中,与 queues 属性互斥,允许指定 queue、其 exchangebinding,以便 RabbitAdmin 在代理上进行声明。

@SendTo 中的 SpEL

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

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

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

有关更多信息,请参阅 注解驱动的监听器端点

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

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

RabbitTemplate 变化

reply-address 添加

reply-address 属性已添加到 <rabbit-template> 组件中,作为 reply-queue 的替代。 有关更多信息,请参阅 请求/回复消息传递。 (在 1.4.4 中也可用作 RabbitTemplate 上的 setter)。

阻塞 receive 方法

RabbitTemplate 现在支持 receiveconvertAndReceive 方法中的阻塞。 有关更多信息,请参阅 轮询消费者

sendAndReceive 方法中的强制性

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

不正确的回复监听器配置

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

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

RabbitManagementTemplate 添加

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

监听器容器 Bean 名称 (XML)

<listener-container/> 元素上的 id 属性已被移除。 从本版本开始,<listener/> 子元素上的 id 独立用于命名为每个监听器元素创建的监听器容器 bean。 应用正常的 Spring bean 名称覆盖。 如果解析了一个具有与现有 bean 相同 id 的后续 <listener/>,则新定义会覆盖现有定义。 以前,bean 名称由 <listener-container/><listener/> 元素的 id 属性组成。 迁移到此版本时,如果您的 <listener-container/> 元素上有 id 属性,请将其移除,并在子 <listener/> 元素上设置 id

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

类级别 @RabbitListener

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

SimpleMessageListenerContainer:回退支持

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

通道关闭日志记录

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

应用程序事件

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

消费者标签配置

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

使用 MessageListenerAdapter

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

LocalizedQueueConnectionFactory 添加

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

匿名队列命名

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