python 微服务 实现gRPC服务端与客户端

1. 配置protobuf

新建hello.proto文件

syntax = "proto3";  // 指定proto版本
package hello;      // 指定默认包名

// 指定golang包名
option go_package = "./;hello";

// 定义Hello服务
service Hello {
// 定义SayHello方法
rpc SayHello(HelloRequest) returns (HelloResponse) {}
}

// HelloRequest 请求结构
message HelloRequest {
string name = 1;
}

// HelloResponse 响应结构
message HelloResponse {
string message = 1;
}

hello.proto文件中定义了一个Hello Service,该服务包含一个SayHello方法,同时声明了HelloRequest和HelloResponse消息结构用于请求和响应。客户端使用HelloRequest参数调用SayHello方法请求服务端,服务端响应HelloResponse消息。一个最简单的服务就定义好了。

2. 编译python用的protobuf

#安装模块
pip install grpcio
#安装编译工具
pip install grpcio-tools
#在hello.proto当前目录运行,编译后得到文件:grpc_pb2_grpc.py、grpc_pb2.py
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto

3. 新建服务端 server.py、客户端 client.py

server.py

# -*- coding: utf-8 -*-
# @Time    : 2022/10/20 10:21
# @Author  : henry
# @FileName: server.py
from concurrent import futures
import grpc
import hello_pb2
import hello_pb2_grpc

# 实现 proto 文件中定义的 GRPCServicer
class HelloServer(hello_pb2_grpc.HelloServicer):
    # 实现 proto 文件中定义的 rpc 调用
    def SayHello(self, request, context):
        print(request.name)
        return hello_pb2.HelloResponse(message = 'reply from python')


def serve():
    # 启动 rpc 服务
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    hello_pb2_grpc.add_HelloServicer_to_server(HelloServer(), server)
    server.add_insecure_port('[::]:8002')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()

client.py

# -*- coding: utf-8 -*-
# @Time    : 2022/10/20 9:54
# @Author  : henry
# @FileName: client.py
import grpc
import hello_pb2
import hello_pb2_grpc

def run():
    # 连接 rpc 服务器
    conn = grpc.insecure_channel('localhost:8002')
    # 调用 rpc 服务
    client = hello_pb2_grpc.HelloStub(conn)
    req = client.SayHello(hello_pb2.HelloRequest(name='from python client'))
    # print(req.message)
    print(req)

if __name__ == '__main__':
    run()

你可能感兴趣的:(Python,python,微服务,开发语言,grpc,rpc)