-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add protobuf codec/serialization support and testcase #425
Conversation
非常感谢,我们尽快review、测试 |
@dongfangshangren 有个问题,新增的protobuf codec是基于什么考虑呢?是跨语言方便吗?如果是的话就ProtobufSerialization 不要用java的ObjectInputStream来处理异常类了。 |
@rayzhang0603 ProtobufCodec不是做跨语言目的,主要功能和DefaultRpcCodec相同,用来encode/decode Request和Response、ProtobufCodec使用protobuf编码比DefaultRpcCodec使用ObjectInputStream/ObjectOutputStream要高效。
ProtobufSerialization使用ObjectInputStream来处理异常类的原因是,Protobuf无法序列化/反序列化执行rpc产生的异常和Response里面的异常,只能使用ObjectInputStream来序列化(因为异常一定实现了Serializable) |
@dongfangshangren 已经review 测试完毕,有一个小问题需要在修改一下:因为后续serialize接口需要支持Object[]的序列化,为了减少以后的兼容问题,需要ProtobufSerialization类能在一个output中序列化多个MessageLite对象。因此希望在serialize和deserialize时对MessageLite的处理方式变更为: serialize:
deserialize:
谢谢 |
@rayzhang0603 已修改 |
非常感谢! |
这个你没引用protobuf的java依赖,另外个人提交的pr,已有使用说明(支持protobuf2、3版本。ProtobufSerialization要求方法参数和返回值必须为基本数据类型或其包装类、String、null、Throwable、Protobuf对象),同时已经附带了testcase
请参照testcase
2017-05-04 17:15 GMT+08:00 Voyager3 <notifications@github.com>:
… 你好,请问你在demorpcclient的protocol里配置codec="protobuf" 之后能跑通client吗
我这里跑到NettyChannel74行
if (result && writeFuture.isSuccess()) {
这里的writeFuture.isSuccess()方法,进去之后是这样
public synchronized boolean isSuccess() { return done && cause == null; }
这个cause会有信息
java.lang.NoSuchMethodError: com.google.protobuf.CodedOutputStream.
writeByteArrayNoTag([B)V
导致writeFuture失败
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#425 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AGTpZ92OnB_O77lD2pQBanRGEmkdeFvYks5r2ZdCgaJpZM4NJz5S>
.
|
支持protobuf2、3版本。ProtobufSerialization要求方法参数和返回值必须为基本数据类型或其包装类、String、null、Throwable、Protobuf对象