本文旨在说明 spring-boot-starter-grpc 框架与 Python 之间跨语言 RPC 调用的友好实现。阅读本文前,请详细阅读 wiki文档,以便了解 spring-boot-starter-grpc 的工作原理。
Java Server & Client
模块说明:
samples-interface 定义了不同的接口,接口的定义中指明了序列化方式,具体包含 Sofa-Hessian、ProtoStuff、FastJSON
samples-server 依赖 samples-interface 模块,并实现了该模块中定义的所有接口
samples-client 依赖 samples-interface,远程调用 samples-server 的实现类,并提供了 HTTP 接口从外部调用 RPC,方便测试
grpc-python 准备工作
0、序列化方式选择
使用 JSON 文本
1、安装 Python 相关库
pip install grpcio
pip install protobuf
pip install grpcio-tools
2、Python 工程相关目录结构说明
com/anoyi/grpc/facade/service/UserServiceByFastJSON.py
对应 Java 模块 samples-facade 中定义的接口 UserServiceByFastJSON
client.py
python grpc 客户端,用于远程调用服务端的方法
server.py
python grpc 服务端,用于提供方法实现,供客户端调用
service.proto
通用的 proto 文件,与 spring-boot-starter-grpc 中定义的一致
service_pb2.py 和 service_pb2_grpc.py
由工具 grpcio-tools 根据 service.proto 生成,生成方式如下:
python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. ./service.proto
Python Server & Java Client
跨语言框架级对接中,使用了通用的 service.proto,所以服务端使用反射机制来将请求体映射到对应的具体实现方法,server.py 具体实现示例:
#!/usr/