此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
2.0 自 1.7 以来的变化
用CachingConnectionFactory
从版本 2.0.2 开始,您可以将 配置为使用与侦听器容器使用的连接不同的连接。
此更改可避免在生产者因任何原因被阻止时出现使用者死锁。
有关更多信息,请参阅使用单独的连接。RabbitTemplate
AMQP 客户端库
Spring AMQP 现在使用 RabbitMQ 团队提供的库的新 5.0.x 版本。
默认情况下,此客户端配置了自动恢复。
请参阅 RabbitMQ 自动连接/拓扑恢复。amqp-client
从版本 4.0 开始,客户端默认启用自动恢复。
虽然与此功能兼容, Spring AMQP 有自己的恢复机制,通常不需要 Client 端恢复功能。
我们建议您禁用自动恢复,以避免在代理可用但连接尚未恢复时获取实例。
从版本 1.7.1 开始, Spring AMQP 禁用它,除非你显式创建自己的 RabbitMQ 连接工厂并将其提供给.
默认情况下,由 创建的 RabbitMQ 实例也具有禁用选项。amqp-client AutoRecoverConnectionNotCurrentlyOpenException CachingConnectionFactory ConnectionFactory RabbitConnectionFactoryBean |
一般更改
现在,默认情况下,它会构建持久交换。
默认情况下,a 中使用的注释还声明 durable exchanges。
默认情况下,在 a 中使用的注释如果已命名,则声明持久队列,如果匿名,则声明非持久队列。
有关更多信息,请参阅适用于队列和交换的 Builder API 和 注释驱动的侦听器终端节点。ExchangeBuilder
@Exchange
@QeueueBinding
@Queue
@RabbitListener
已删除的类
UniquelyNameQueue
不再提供。
创建具有唯一名称的持久非自动删除队列是不常见的。
此类已被删除。
如果需要其功能,请使用 .new Queue(UUID.randomUUID().toString())
新建侦听器容器
已与现有的 .
有关选择要使用的容器以及如何配置它们的信息,请参阅选择容器和 Message Listener 容器配置。DirectMessageListenerContainer
SimpleMessageListenerContainer
Log4j 附加程序
由于 log4j 的生命周期结束,此 appender 不再可用。 有关可用日志附加程序的信息,请参见Logging Subsystem AMQP Appenders。
RabbitTemplate
变化
以前,如果非事务性事务性在事务性侦听器容器线程上运行,则它参与现有事务。
这是一个严重的错误。
但是,用户可能依赖于此行为。
从版本 1.6.2 开始,您必须在模板上设置布尔值,使其参与容器事务。RabbitTemplate channelTransacted |
现在使用 a(默认情况下),而不是为每个请求创建新的使用者。
有关更多信息,请参阅 RabbitMQ Direct 回复。RabbitTemplate
DirectReplyToMessageListenerContainer
现在支持直接回复。
有关更多信息,请参阅 Async Rabbit Template 。AsyncRabbitTemplate
现在有 和 方法,这些方法采用参数,让调用方指定要将结果转换为的类型。
这对于复杂类型或当类型信息未在消息头中传达时特别有用。
它需要 .
有关更多信息,请参见请求/回复消息、异步 Rabbit 模板、使用 RabbitTemplate
从消息
转换和使用 RabbitTemplate
从消息
转换。RabbitTemplate
AsyncRabbitTemplate
receiveAndConvert
convertSendAndReceiveAsType
ParameterizedTypeReference<T>
SmartMessageConverter
Jackson2JsonMessageConverter
现在,您可以使用 a 在专用通道上执行多项操作。
有关更多信息,请参阅 Scoped Operations 。RabbitTemplate
侦听器适配器
可以方便地将 lambda 与 .
有关更多信息,请参见MessageListenerAdapter
。FunctionalInterface
MessageListenerAdapter
侦听器容器更改
预取默认值
prefetch 默认值以前为 1,这可能导致高效消费者的利用率不足。 默认预取值现在是 250,在大多数常见情况下,这应该会让使用者忙碌起来,并且, 因此,可以提高吞吐量。
在某些情况下,prefetch 值应 低 — 例如,对于大型消息,尤其是在处理速度较慢的情况下(消息可能会累积 添加到客户端进程中的大量内存),并且如果需要严格的消息排序 (在这种情况下,prefetch 值应设置回 1)。 此外,对于低容量消息收发和多个使用者(包括单个侦听器容器实例中的并发),您可能希望减少预取,以便在使用者之间更均匀地分配消息。 |
有关预取的更多背景信息,请参阅这篇关于 RabbitMQ 中的使用者利用率的博文和这篇关于排队理论的博文。
消息计数
以前,为容器发出的消息返回。
此属性仅在您使用(例如,from methods)时适用,并且现在已初始化为容器消息。MessageProperties.getMessageCount()
0
basicGet
RabbitTemplate.receive()
null
事务回滚行为
事务回滚时的消息重新排队现在是一致的,无论是否配置了事务管理器。 有关更多信息,请参阅 回滚已接收消息的说明 。
关闭行为
如果容器线程不响应 Shutdown 内,则默认情况下会强制关闭通道。
有关更多信息,请参阅 Message Listener Container Configuration (消息侦听器容器配置)。shutdownTimeout
连接工厂更改
connection 和 channel listener 接口现在提供了一种获取有关异常信息的机制。 有关更多信息,请参阅连接和通道侦听器和发布是异步的 — 如何检测成功和失败。
现在提供了一个 new 版本,用于填充来自 .
有关更多信息,请参阅连接和资源管理。ConnectionNameStrategy
AbstractConnectionFactory
重试更改
不再提供。
它的功能现在是内置的。
有关更多信息,请参阅同步操作失败和重试选项。MissingMessageIdAdvice
匿名队列命名
默认情况下,现在使用 default 而不是简单字符串命名。
有关更多信息,请参阅 AnonymousQueue
。AnonymousQueues
Base64UrlNamingStrategy
UUID
@RabbitListener
变化
现在,您可以在 annotations 中提供简单的队列声明(仅绑定到默认 exchange)。
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。@RabbitListener
您现在可以配置注释,以便将任何异常返回给发件人。
您还可以配置 来处理异常。
有关更多信息,请参阅处理异常。@RabbitListener
RabbitListenerErrorHandler
现在,您可以在使用注释时将队列与多个路由键绑定。
现在还支持自定义交换类型,并默认声明持久交换。@QueueBinding
@QueueBinding.exchange()
现在,您可以在注释级别设置侦听器容器的 ,而不必为不同的并发设置配置不同的容器工厂。concurrency
现在,您可以在 Comments 级别设置侦听器容器的属性,从而覆盖容器工厂中的默认设置。autoStartup
现在,您可以在容器工厂中设置 after receive 和 before send (reply) 实例。MessagePostProcessor
RabbitListener
有关更多信息,请参阅 Annotation-driven Listener Endpoints 。
从版本 2.0.3 开始,可以将类级别的 Comments 之一指定为 default。
有关更多信息,请参阅 Multi-method Listeners 。@RabbitHandler
@RabbitListener
容器条件回滚
当使用外部事务管理器(例如 JDBC)时,当您为容器提供事务属性时,现在支持基于规则的回滚。 现在,当您使用交易通知时,它也更加灵活。 有关更多信息,请参阅条件回滚。
删除 Jackson 1.x 支持
Jackson 转换器和相关组件在以前的版本中已弃用,现在已被删除。
您可以使用基于 Jackson 2.x 的类似组件。
有关更多信息,请参见Jackson2JsonMessageConverter
。1.x
JSON 消息转换器
当 the 设置为入站 JSON 消息时,默认转换类型现在为 。
以前,它是 .
要恢复到 ,您可以在 .TypeId
Hashtable
LinkedHashMap
Hashtable
Hashtable
setDefaultMapType
DefaultClassMapper
XML 解析器
在解析 XML 组件时,如果存在属性,解析器不再将属性值注册为 Bean 别名。
有关更多信息,请参阅有关 id
和 name
属性的说明。Queue
Exchange
name
id
阻止的连接
您现在可以将 注入到对象中。
此外,当 Broker 阻止或取消阻止连接时,会发出 和 事件。com.rabbitmq.client.BlockedListener
org.springframework.amqp.rabbit.connection.Connection
ConnectionBlockedEvent
ConnectionUnblockedEvent
ConnectionFactory
有关更多信息,请参阅连接和资源管理。