|
该版本仍在开发中,尚未被视为稳定。请使用最新的稳定版本,使用 Spring AMQP 4.0.0! |
2.0 版本自 1.7 版本以来的变化
用缓存连接工厂
从2.0.2版本开始,你可以配置兔子模板使用与监听器容器不同的连接。
这一变化避免了当生产者因任何原因被阻挡时,消费者陷入僵局。
更多信息请参见“使用单独连接”。
AMQP 客户端库
Spring AMQP 现在使用新的 5.0.x 版本AMQP-client由RabbitMQ团队提供的库。
这个客户端默认设置了自动恢复。
参见RabbitMQ自动连接/拓扑恢复。
从4.0版本起,客户端默认启用自动恢复。
虽然兼容此功能,但 Spring AMQP 有自己的恢复机制,客户端恢复功能通常不需要。
我们建议您关闭AMQP-client自动恢复,以避免获得自动恢复连接非当前开放异常代理可用但连接尚未恢复的情况。
从 1.7.1 版本开始,Spring AMQP 会禁用它,除非你明确创建自己的 RabbitMQ 连接工厂并提供给缓存连接工厂.
兔子MQ连接工厂由兔子连接工厂豆另外,默认关闭这个选项。 |
总体变更
这交换构建器现在默认构建持久交易所。
这@Exchange注释用于@QeueueBinding同时默认声明持久交易所。
这@Queue注释用于@RabbitListener默认情况下,如果有名字,则声明持久队列,如果是匿名的则为非持久队列。
更多信息请参见关于队列与交换的构建器 API 以及注释驱动的监听器端点。
已删除的职业
独特名称队列现已不再提供。
创建具有唯一名称的持久非自动删除队列是不常见的。
该职业已被删除。
如果你需要它的功能,请使用new Queue(UUID.randomUUID().toString()).
Log4j 附录
由于log4j的生命周期结束,该附加符已不再可用。 有关可用日志附加器的信息,请参见 AMQP 附录器。
兔子模板变化
之前,一个非交易性兔子模板如果该事务运行在事务监听器容器线程上,则参与了该交易。
这是个严重的bug。
然而,用户可能依赖于这种行为。
从1.6.2版本开始,你必须设置频道交易模板上的布尔值,使其参与容器事务。 |
这兔子模板现在使用DirectReplyToMessageListenerContainer(默认情况下)而不是为每个请求创建一个新的消费者。
更多信息请参见RabbitMQ直接回复。
这异步兔子模板现在支持直接回复。
更多信息请参见异步兔子模板。
这兔子模板和异步兔子模板现在有接收并转换和convertSendAndReceiveAsType采用ParameterizedTypeReference<T>调用者可以指定要将结果转换为的类型。
这对于复杂类型或类型信息未通过消息头部传达时尤其有用。
它需要智能消息转换器例如:Jackson2JsonMessageConverter.
参见请求/回复消息,异步兔子模板,从消息跟兔子模板,以及[json-complex]以获取更多信息。
你现在可以使用兔子模板在专用通道上执行多项作。
更多信息请参见“范围作”。
监听适配器
一个方便的功能接口是用于使用 lambda 的MessageListener适配器.
看MessageListener适配器更多信息请见。
监听器容器变更
预取默认值
预取默认值以前是1,这可能导致高效用户的利用率不足。 默认预取值现在是250,这在大多数常见场景下应该能让消费者忙碌起来, 因此,能够提升吞吐量。
| 在某些情况下,预取值应该是 要低——例如,对于大消息,尤其是处理缓慢(消息可能累积)时 客户端进程中占用大量内存),如果需要严格的消息顺序 (此时预取值应设回1。) 此外,在低流量消息和多消费者(包括单个监听器容器实例内的并发)情况下,你可能希望减少预取,以实现消息在消费者间更均匀分布。 |
关于预取的更多背景,请参见这篇关于RabbitMQ中消费者利用率的文章和这篇关于排队理论的文章。
消息数量
以前MessageProperties.getMessageCount()返回0用于容器发出的消息。
该特性仅适用于您使用基本获取(例如,来自RabbitTemplate.receive()方法)且现初始化为零用于容器消息。
事务回滚行为
无论是否配置了事务管理器,消息回滚时的重新排队都是一致的。 更多信息请参见“回滚已接收消息”说明。
关机行为
如果容器线程对内部关闭没有响应停机 Timeout,通道默认被强制关闭。
更多信息请参见消息监听器容器配置。
连接工厂变更
连接接口和通道监听器接口现在提供了获取异常信息的机制。 更多信息请参见《连接与渠道:听众与发布异步——如何检测成功与失败》。
一个新的连接名称策略现在提供了用于填充针对 RabbitMQ 连接的应用特定标识,来自摘要连接工厂.
更多信息请参见连接与资源管理。
重试变更
这MissingMessageIdAdvice现已不再提供。
其功能现已内置。
更多信息请参见同步作失败和重试选项。
匿名队列命名
默认情况下,匿名队列现在以默认命名Base64Url命名策略而不是简单的UUID字符串。
看匿名队列更多信息请见。
@RabbitListener变化
你现在可以在 下文中提供简单的队列声明(只绑定到默认交换)@RabbitListener附注。
更多信息请参见注释驱动监听器端点。
你现在可以配置了@RabbitListener注释以便将异常返回给发送方。
你也可以配置一个兔子听众错误处理者处理例外情况。
更多信息请参见处理例外。
现在你可以在使用@QueueBinding注解。
也@QueueBinding.exchange()现在支持自定义交易所类型,并默认声明持久交易所。
你现在可以设置并发在注释层面使用监听器容器,而无需为不同的并发设置配置不同的容器工厂。
你现在可以设置自动启动在注释层面,覆盖了监听器容器的属性,覆盖了容器工厂中的默认设置。
你现在可以设置收件后和发送前(回复)消息后处理器实例兔子听者集装箱工厂。
更多信息请参见注释驱动监听器端点。
从2.0.3版本开始,其中一个@RabbitHandler类级注释@RabbitListener可以指定为默认。
更多信息请参见多方法监听器。
容器条件回滚
当使用外部事务管理器(如JDBC)时,只要你为容器提供交易属性,就支持基于规则的回滚。 使用交易建议时,现在也更加灵活。 更多信息请参见“条件回滚”。
移除Jackson 1.x支持。
在之前版本中已被弃用,Jackson1.x转换器及相关组件现已被删除。
你可以使用基于Jackson 2.x的类似组件。
更多信息请参见 JSON 消息转换器。
JSON 消息转换器
当TypeID设置为哈希表对于入站的JSON消息,默认转换类型现在为LinkedHashMap.
以前,它是哈希表.
要恢复为哈希表,你可以使用setDefaultMapType在默认类映射器.
XML 解析器
解析时队列和交换XML组件中,解析器不再注册名称属性值作为豆别名,如果身份证属性存在。
看关于身份证和名称属性更多信息请见。
连接被阻断
你现在可以注射com.rabbitmq.client.BlockedListener进入org.springframework.amqp.rabbit.connection.Connection对象。
另外,还有连接阻塞事件和ConnectionUnblockedEvent事件由连接工厂当连接被经纪人阻断或解除时。
更多信息请参见连接与资源管理。