项目已经移至 rpcx-ecosystem/rpcx-agent
因为 rpcx 主要目的是为 Go 生态圈提供一个服务发现和服务治理的RPC框架,所以它并不直接支持其它编程语言的调用。但是实际情况是国内很多公司主要是用Java、PHP、C++、Python等编程语言作为主力语言,如何让使用这些语言的开发者调用rpcx的服务,是一个让人头疼的问题。
国内互联网企业中使用比较多的是Dubbo和Motan,它们的用户主要使用Java和PHP开发。如果你想提供一个Go语言编写的服务,不太可能要求用户换成Go语言来调用。一个解决方案是使用跨语言的RPC框架,比如gRPC,但是它缺乏服务治理的能力,服务发现和负载均衡也需要自己实现。
为了让rpcx更广泛的应用在企业的产品中,我尝试采用一种曲折而略有hack的方式来提供对rpcx的跨语言调用,这也是本项目创建的初衷。
最基本的想法提供一个Agent, 客户通过gRPC和Agent通信,Agent将请求翻译成rpcx的格式,可以利用rpcx的服务治理的能力,在集群中选择服务进行调用,它会把服务结果返回给客户。
因为客户通过gRPC和Agent进行通信,所以可以利用gRPC的跨语言的能力。只要gRPC支持的语言,都可以和rpcx进行通信。
建议将Agent部署在客户机上,这样客户和Agent进行本地通信,性能损耗可以减少懂啊最少。
目前仅支持protobuf编码的格式。
客户需要知道服务的proto的定义,它会使用这个proto准备输入参数,也会根据这个proto解出返回结果。
你可以参考 agent_test.go 看看客户是如何进行调用的。
目前这个项目还是试验性的,只是进行概念性的验证,暂时不要应用在项目中。
欢迎提出您的宝贵的意见和建议,也非常欢迎讨论rpcx的跨平台的解决方案。