dubbo-go
dubbo-go copied to clipboard
Triple non-proto mode support
triple协议非proto模式的支持,比如一个是
- 完全无proto
- 一个是client侧无proto
无 proto 场景
server
- 如何注册服务?
server.Register(handler, opts...)
// 反射生成 ServiceInfo,并最终进入当前proto模式: Register(handler, serviceInfo, opts...)
- 使用什么序列化?
由 client 端的配置决定,server侧也可以设置默认配置;主推是 json?其实应该是什么格式都能支持
client
- 怎么发起调用?
genericService := client.NewGenericService(ctx, interfaceName, refOpts)
genericService.Call(ctx, {req, &resp}, methodName, callOpts)
// 或者
client.Call(ctx, {req, &resp}, interfaceName, methodName, refOpts, callOpts)
发起调用的类型,通过 CallOption.WithContentType() 区分(映射到 Serialization 类型):
- 全部不使用 proto - 强约束必须 request/response 参数模式,不支持多参数
- client 侧有 struct 强类型,application/json
- client 侧无 struct 类型,application/generic+json
- 使用 proto
- client 侧无 proto,application/protoc+json
- client 侧无 proto,基于 server reflection,用户输入json链路传输proto binary
- 和之前的 dubbo2+hessian 模式有什么区别?和之前 Generic 泛化调用的区别?
- 在 go 体系下,之前的泛化调用继续存在,但是废弃;
- 与 java 互通的话,3.2 版本开始推荐用其他模式
- triple+idl 标准模式,要求是java从开始就是idl写的
- 如果开始是java模式写的,则发布rest服务互通,需要 dubbo-go 支持 rest 模式的服务调用与发布。
- ~~如果是 java 3.3 版本及以下,走 generic 繁华调用模式~~
以上所有场景,考虑如何通过 cli 插件在编码/编译期做一些事情,以简化用户开发