本文介绍如何使用Java、Go、NodeJS、Python编程语言实现gRPC的Unary RPC、Server streaming RPC、Client streaming RPC、Client streaming RPC通信模型。
示例工程
gRPC的示例工程请参见hello-servicemesh-grpc,本文档中提到的目录都为hello-servicemesh-grpc下的目录。
步骤一:转换代码
步骤二:设置通信模型
步骤三:开发功能函数
结果验证
功能验证
在一个终端启动gRPC服务端,在另一个终端启动gRPC客户端。启动服务端和客户端后,客户端将分别对4个通信接口进行请求。
- 使用Java语言时启动gRPC服务和客户端。
mvn exec:java -Dexec.mainClass="org.feuyeux.grpc.server.ProtoServer"
mvn exec:java -Dexec.mainClass="org.feuyeux.grpc.client.ProtoClient"
- 使用Go语言时启动gRPC服务和客户端。
go run server.go
go run client/proto_client.go
- 使用NodeJS语言时启动gRPC服务和客户端。
node proto_server.js
node proto_client.js
- 使用Python语言时启动gRPC服务和客户端。
python server/protoServer.py
python client/protoClient.py
如果没有出现通信错误,则表示启动gRPC服务和客户端成功。
交叉通信
交叉通信用以确保不同编程语言实现的gRPC通信行为一致。从而保证路由到不同编程语言版本,结果是一致的。
构建工程和镜像
完成gRPC服务端和客户端功能验证后,您还可以构建gRPC服务端和客户端的镜像。
构建工程
使用4种语言构建服务端和客户端的工程。
- Java
分别构建服务端和客户端的JAR,将其拷贝到Docker目录备用。
mvn clean install -DskipTests -f server_pom cp target/hello-grpc-java.jar ../docker/ mvn clean install -DskipTests -f client_pom cp target/hello-grpc-java.jar ../docker/
- Go
Go编译的二进制是平台相关的,最终要部署到Linux上,因此构建命令如下。然后将二进制拷贝到Docker目录备用。
env GOOS=linux GOARCH=amd64 go build -o proto_server server.go mv proto_server ../docker/ env GOOS=linux GOARCH=amd64 go build -o proto_client client/proto_client.go mv proto_client ../docker/
- NodeJS
NodeJS需要在Docker镜像中进行构建,才能支持运行时所需的各种C++依赖。因此这一步主要是拷贝备用。
cp ../hello-grpc-nodejs/proto_server.js node cp ../hello-grpc-nodejs/package.json node cp -R ../hello-grpc-nodejs/common node cp -R ../proto node cp ../hello-grpc-nodejs/*_client.js node
- Python
Python无需编译,拷贝备用即可。
cp -R ../hello-grpc-python/server py cp ../hello-grpc-python/start_server.sh py cp -R ../proto py cp ../hello-grpc-python/proto2py.sh py cp -R ../hello-grpc-python/client py cp ../hello-grpc-python/start_client.sh py
构建GRPC服务端和客户端镜像
构建完毕后,Docker路径下存储了Dockerfile所需的全部文件,Dockerfile中重点信息说明如下。
- 基础镜像尽量选择alpine,因为尺寸最小。示例中Python的基础镜像选择的是2.7版本的python:2,您可以根据实际情况修改Python的基础镜像版本。
- NodeJS需要安装C++及编译器Make,Npm包需要安装grpc-tools。
这里以NodeJS 服务端的镜像作为示例,说明构建镜像的过程。