【gRPC】Python 调用 Java 的 gRPC 服务
本文旨在用 Java 搭建一个非常简单的 say hello
gRPC 服务,并用 Python 语言调用。
gRPC介绍
略
.proto 文件
首先定一个非常简单的 hello.proto
文件来定义 gRPC 接口以及参数对象。
上面的 hello.proto
文件定义了一个 HelloService
的服务,里面定义了一个 rpc 方法 sayHello
, 方法的参数是 HelloRequest
类型,返回值是 HelloResponse
类型。
HelloRequest
, HelloResponse
的定义非常简单,都只有一个 string 类型的字段。
服务端
Java 代码生成
在项目中新建
src/main/proto
文件夹,将上面的hello.proto
放进去。在 Maven 工程中,配置 pom.xml 添加以下依赖和打包配置:
在项目根目录执行
mvn compile
即可生成和 proto 文件对应的 java 代码。
生成的代码在 target/generated-resources/protobuf/grpc-java 和 target/generated-resources/protobuf/java 两个文件夹下,一个用来存放 HelloService 相关代码,另一个用来存放 HelloRequest,HelloResponse 相关代码。
接口实现
新建一个java文件,HelloServiceImpl.java, 继承上一步自动生成的service代码中的抽象实现类,并重写 sayHello 方法即可:
代码足够简单,不再多做说明。
启动 gRPC 服务
在入口类的 main 方法中创建 Server 对象,监听端口,添加刚才的 service 实现类后启动。
运行 main 方法之后,我们就有了一个 gRPC 服务运行在 localhost:8003
.
客户端
客户端代码生成
将 hello.proto 文件放在 python 工程根目录下的 proto 文件夹下。
安装依赖
代码生成
其中:
-I
指定 .proto 文件所在的文件夹python_out
指定 HelloRequest, HelloResponse 等 message 对象编译出来的python文件存放目录grpc_python_out
指定 HelloService 相关的 python 文件存放目录
如果本地安装的是 Python 3, 把上面的命令改成相应的
pip3
和python3
调用 gRPC 服务
在 client.py 中引入生成的代码,设置刚才启动的 gRPC 服务的地址,调用 sayHello 方法。
运行 client.py 即可在客户端看到返回结果:
文中示例代码在 Github 上可找到。
版权声明: 本文为 InfoQ 作者【遇见】的原创文章。
原文链接:【http://xie.infoq.cn/article/62d9e2206c006c8941a233d9b】。文章转载请联系作者。
评论