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。

基本都是这样做的:

  1. 服务端暴露http类型的协议,例如:jsonRPC
  2. 他们各自的客户端连接zookeeper获取要调用的服务的服务端信息
  3. 进行客户端的负载均衡,选取一个服务端
  4. 将要调用的服务、方法及参数,组成jsonrpc结构,进行调用

问题,这些各个语言的dubbo库,都只是客户端的,对于服务端没有支持。

上一篇 下一篇

猜你喜欢

热点阅读