跳到主要内容
版本:4.1.1

1.5 自 1.4 以来的变更

Doubao 中英对照 Changes in 1.5 Since 1.4

不再支持 spring-erlang​

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

CachingConnectionFactory 变更​

CachingConnectionFactory 中的空 addresses 属性​

此前,如果连接工厂配置了 host 和 port,但同时为 addresses 提供了空字符串,则 host 和 port 会被忽略。现在,空的 addresses 字符串被视为与 null 相同,从而使用 host 和 port。

URI 构造函数​

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

连接重置​

新增了名为 resetConnection() 的方法,让用户可以重置连接(或多个连接)。例如,你可以在故障转移到次级 broker 之后,用它重新连接主 broker。这确实会影响进程内操作。现有的 destroy() 方法作用完全相同,但新方法的名称更友好。

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

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

现在 declarationRetries、failedDeclarationRetryInterval 和 retryDeclarationInterval 属性可配置。更多信息参见消息 Listener 容器配置。

类包变更​

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

DefaultMessagePropertiesConverter 变更​

现在可以配置 DefaultMessagePropertiesConverter,以决定转换为 String(而非 DataInputStream)的 LongString 的最大长度。该转换器有一个接收该值作为上限的备用构造函数。此前,此上限硬编码为 1024 字节。(1.4.4 中也已提供。)

@RabbitListener 改进​

用于 @RabbitListener 的 @QueueBinding​

@RabbitListener 注解新增了 bindings 属性,它与 queues 属性互斥,用于指定 queue、其 exchange 和 binding,以便由 broker 上的 RabbitAdmin 进行声明。

@SendTo 中的 SpEL​

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

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

现在可以组合使用 SpEL 和属性占位符,为 listener 指定多个队列。

更多信息参见注解驱动的 Listener 端点。

自动声明 Exchange、Queue 与 Binding​

现在可以声明定义这些实体集合的 Bean,RabbitAdmin 会在建立连接时将其内容加入它所声明的实体列表。更多信息参见声明 Exchange、Queue 与 Binding 的集合。

RabbitTemplate 变更​

新增 reply-address​

<rabbit-template> 组件新增了 reply-address 属性,作为 reply-queue 的替代。更多信息参见请求/回复消息传递。(1.4.4 中也已作为 RabbitTemplate 上的 setter 提供。)

阻塞式 receive 方法​

RabbitTemplate 现在在 receive 和 convertAndReceive 方法中支持阻塞。更多信息参见轮询 Consumer。

sendAndReceive 方法中的 mandatory​

在使用 sendAndReceive 和 convertSendAndReceive 方法时设置了 mandatory 标志后,如果请求消息无法投递,调用线程会抛出 AmqpMessageReturnedException。更多信息参见回复超时。

不当的回复 Listener 配置​

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

更多信息参见回复 Listener 容器。

新增 RabbitManagementTemplate​

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

Listener 容器 Bean 名称(XML)​

important

<listener-container/> 元素上的 id 属性已被移除。从本版本开始,仅使用 <listener/> 子元素上的 id 来为每个 listener 元素所创建的 listener 容器 Bean 命名。

正常的 Spring Bean 名称覆盖规则仍然适用。如果后续解析的 <listener/> 与已有 Bean 具有相同的 id,则新定义会覆盖已有定义。此前,Bean 名称由 <listener-container/> 和 <listener/> 元素的 id 属性组合而成。

迁移到本版本时,如果你的 <listener-container/> 元素上有 id 属性,请将其移除,改为在子元素 <listener/> 上设置 id。

不过,为支持成组地启动和停止容器,新增了 group 属性。当定义了此属性时,由该元素创建的容器会被加入一个以此名称命名、类型为 Collection<SimpleMessageListenerContainer> 的 Bean。你可以遍历该组来启动和停止容器。

类级别的 @RabbitListener​

@RabbitListener 注解现在可以应用于类级别。结合新的 @RabbitHandler 方法注解,这让你能够根据负载类型选择处理方法。更多信息参见多方法 Listener。

SimpleMessageListenerContainer:BackOff 支持​

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

Channel 关闭日志​

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

应用事件​

当 consumer 失败时,SimpleMessageListenerContainer 现在会发出应用事件。更多信息参见Consumer 事件。

Consumer Tag 配置​

此前,异步 consumer 的 consumer tag 由 broker 生成。从本版本开始,可以为 listener 容器提供命名策略。参见Consumer Tag。

使用 MessageListenerAdapter​

MessageListenerAdapter 现在支持一个队列名(或 consumer tag)到方法名的映射,以根据消息来源队列决定调用哪个委托方法。

新增 LocalizedQueueConnectionFactory​

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

匿名队列命名​

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