dubbo跨语言的研究(c++)
2020-02-12 本文已影响0人
雨中星辰0
作者 | 时间 |
---|---|
雨中星辰 | 2020-02-12 |
各种方式的优缺点
dubbo协议 | http协议 | thrift协议 | jni(用java封装) | |
---|---|---|---|---|
c++服务端,c++客户端 | 不满足 | 能调用,但与服务总线(dubbo)无关 | 能调用,但与服务总线(dubbo)无关 | 满足 |
C++服务端,java客户端 | 不满足 | 能调用,但与服务总线(dubbo)无关 | 能调用,但与服务总线(dubbo)无关 | 满足 |
java服务端,C++客户端 | 不满足 | 不满足 | 满足 | 满足 |
java服务端,java客户端 | 满足 | 满足 | 满足 | 满足 |
推荐的场景 | 服务端客户端都为java | 服务端为java,客户端为其他,如:APP、web等 | 用于不同语言的服务端与客户端的通信 | 用于c、c++与java交互的环境使用 |
特点 | 可以完整的使用服务总线(dubbo)的功能 | 该场景客户端实际上不是dubbo,原dubbo的一些功能不能使用,例如负载均衡、权重等 | 1. 服务器需要安装thrift,部分版本过低的服务器可能安装会有困难,例如:凝思6.0.40 | 只支持c\c++,且该方案需要工作量较大,要么制定统一标准,例如,所有的返回值,都返回统一的类型,接口都使用简单类型等。如果要保持原接口不变的话,需要每个接口自行写jni的实现。 |
目前来看jni反而是一个比较通用的方法,
c++的服务端使用jni对服务进行包装,通过服务总线(dubbo)发布服务,最终打包成一个jar包,启动服务。
c++客户端也使用jni方式通过服务总线(dubbo)调用服务。
市场上别人是怎么做的?
我简单研究了githup中的dubbo-python、dubbo-node-client、dubbo-php-client。
基本都是这样做的:
- 服务端暴露http类型的协议,例如:jsonRPC
- 他们各自的客户端连接zookeeper获取要调用的服务的服务端信息
- 进行客户端的负载均衡,选取一个服务端
- 将要调用的服务、方法及参数,组成jsonrpc结构,进行调用
问题,这些各个语言的dubbo库,都只是客户端的,对于服务端没有支持。