liuxuzxx commented on a change in pull request #3386:
URL: https://github.com/apache/rocketmq/pull/3386#discussion_r723122895
##########
File path:
remoting/src/main/java/org/apache/rocketmq/remoting/protocol/RemotingSerializable.java
##########
@@ -17,11 +17,17 @@
package org.apache.rocketmq.remoting.protocol;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
import java.nio.charset.Charset;
public abstract class RemotingSerializable {
private final static Charset CHARSET_UTF8 = Charset.forName("UTF-8");
+ static {
Review comment:
测试了下fastjson的最新版本(1.2.76)是可以适配两种json格式的处理的,但是考虑到客户端的fastjson的版本是否也能够兼容和适配,存在风险性。
由于存在服务模块,namesrv,broker三者之间通过rpc的方式进行交流,所以,为了兼容,我想了如下方案来处理:
```
org.apache.rocketmq.remoting.protocol.RemotingCommand
这个类所有的请求命令类,在这个类里面有个属性:version,这个属性记录了当前请求的RocketMQ的版本号,那么就可以根据这个版本号来判断,toJSON()调用的时候是否需要设置:
SerializerFeature.WriteNonStringKeyAsString 属性,具体的伪代码如下:
if(version>= 设置了WriteNonStringKeyAsString版本号){
return JSON.toJSON(obj,SerializerFeature.WriteNonStringKeyAsString);
}else{
return JSON.toJSON(obj);
}
```
目前我只能想到这个兼容方案了,因为,可能存在客户端,namesrv和broker以及不同的broker版本号都可能不一致的情况,所以,你之前提到的三个问题,如果是通过我这种一棍子打死的方式来处理,确实很粗暴。那么正好就利用这个version属性来做这个版本的分割线判断!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]