RocketMQ4.7.0新特性

       三月24日(March 04, 2020)Apache RocketMQ发布了4.7.0最新版本。这次的新版本中增加了一个新特性(同步复制更改为管道方式)。同时也做了一些优化,包括防止客户端提交过于频繁,添加MessageExt的获取BrokerName方法等。修复的bug包括修复MessageClientIDSetter注入问题,修复关于异步发送重试的问题等。本文对部分更新进行翻译,然后补充一下最新的源码。(没办法每次都看英文版太累了,本文摘录了一部分自己感兴趣的内容。)


最新版本下载
Source: rocketmq-all-4.7.0-source-release.zip
Binary: rocketmq-all-4.7.0-bin-release.zip

一、新特性


1.1同步复制更改为管道方式。
1.2源码更新(部分内容)
https://github.com/apache/rocketmq/commit/64e4ca727dabc652edf0bf2e9188f80578d605f7

二、优化

2.3防止客户端提交过于频繁 2.2
https://github.com/apache/rocketmq/commit/35c38888e0d5678fb4aaad5ba8534b7552d9a9a0
2.4添加MessageExt。getBrokerName方法
https://github.com/apache/rocketmq/commit/d03e46a4cb0be50401a4fcd9132392a6dde43861

三、BUG修复


备注:3.1和3.2要放着一起看,3.2可以说是修复因为3.1修复引起的bug。
3.1修复MessageClientIDSetter注入错误的pid的错误

RocketMQ4.7.0新特性

3.2修复MessageClientIDSetter#getIPFromID返回错误pid的错误
RocketMQ4.7.0新特性
3.3修复关于异步发送重试的问题
        异步发送的重试次数并没有生效,因为在 方法中 MQClientAPIImpl#sendMessageAsync 发送失败后调用时 timeoutMillis 是0 ,导致后面超时判断直接判定超时,第一次重试就失败。
onExceptionImpl(brokerName, msg, 0L, request, sendCallback, topicPublishInfo, instance,
retryTimesWhenSendFailed, times, ex, context, true, producer);
       然后,在重试时会重置请求id,但是重置的方法和创建request时分配请求id的方法会导致出现反复id。incrementAndGet 和 getAndIncrement 一起使用了,导致其他请求的响应影响的异步发送的响应,导致回调函数没有执行,重试中断。

总结:

RocketMQ社区是个很有趣的地方。