`

grpc实战示例

阅读更多

grpc 是rpc的一类。

grpc官网 : http://www.grpc.io/docs/tutorials/basic/python.html

序列化使用的是:https://developers.google.com/protocol-buffers/

cs模式,stub校验 

四种模式,其实也就两种大模式有stream,没stream的;使用stream只不过是为了减少系统的开销 

以下例子是python版,其它版体是大同小异

 

使用步聚:

 

1)定义IDL

syntax = "proto3";

package hello;

service Greeter {
    rpc SayHello (HelloRequest) returns (stream HelloReply) {}
}


service ConnMysql {
    rpc ConnectMysql (MyqlRequest) returns (MysqlResponse) {}
}

message HelloRequest {
  string message = 1;
  int64 age = 2;
}

message HelloReply {
  string message = 1;
  int64 age = 2;
}


message MyqlRequest {
    string dbname = 1;

}

//连接mysql,响应返回值
message MysqlResponse {
    repeated string selectlist = 1;
}

 

  生成接口代码:

 python -m grpc.tools.protoc -I=. --python_out=/Users/admin/devops/logCenter/logops/grpc/  --grpc_python_out=/Users/admin/devops/logCenter/logops/grpc/  proto/log.proto

 

生成的是一个log_pb2.py

 

2)写server端代码

 

 

# coding:utf-8
import log_pb2
from concurrent import futures
import grpc
import time

_ONE_DAY_IN_SECONDS = 60 * 60 * 24
import MySQLdb


class Greeter(log_pb2.GreeterServicer):
    def SayHello(self, request, context):
        try:

            conn = MySQLdb.connect(
                host='127.0.0.1',
port=3306,
user='root',
passwd='hugo',
db='jiraconnector'
)
            cur = conn.cursor()
            sqli = "insert into api_taskid (task_id,task_name,task_env,create_time) VALUES (%s,%s,%s,%s)"
cur.execute(sqli, (request.message, request.age, '4', '2016-06-20 06:54:28.488573'))
            cur.close()
            conn.commit()
            conn.close()
            print request.message
            print request.age
            yield log_pb2.HelloReply(message='hello hugo', age=10)
        except Exception as e:
            print e


class ConnMysql(log_pb2.ConnMysqlServicer):
    def ConnectMysql(self, request, context):
        print request.dbname
        return log_pb2.MysqlResponse(selectlist='1')


def server():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    log_pb2.add_GreeterServicer_to_server(Greeter(), server)
    log_pb2.add_ConnMysqlServicer_to_server(ConnMysql(), server)
    server.add_insecure_port('127.0.0.1:15000')
    server.start()
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)


if __name__ == '__main__':
    server()

 

3)写client端

 

# coding:utf-8
import grpc
import log_pb2

_TIMEOUT_SECONDS = 10


def run():
    try:
        # with log_pb2.beta_create_Greeter_stub(,'127.0.0.1',15000) as stub :
        #     response = stub.SayHello(log_pb2.HelloRequest(message='hello hugo',name='18'),_TIMEOUT_SECONDS)
        #     print response

        channel = grpc.insecure_channel('127.0.0.1:15000')
        stub = log_pb2.GreeterStub(channel)
        response = stub.SayHello(log_pb2.HelloRequest(message='hugo000000', age=19), _TIMEOUT_SECONDS)
        conn_mysql_stub = log_pb2.ConnMysqlStub(channel)
        res = conn_mysql_stub.ConnectMysql(log_pb2.MyqlRequest(dbname='jiraconnector'), _TIMEOUT_SECONDS)
        print res
        print response.next()
    except Exception as e:
        print e


if __name__ == '__main__':
    run()

 

4)结果

 

selectlist: "1"

 

message: "hello hugo"

age: 10

 

总结:简单易用,文档规范。

 

常见错误

<_Rendezvous of RPC that terminated with (StatusCode.UNIMPLEMENTED, Method not found!)>
 
<_Rendezvous of RPC that terminated with (StatusCode.UNKNOWN, Exception calling application: 'int' object is not iterable)
log.proto: Required fields are not allowed in proto3.

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

 
log.proto: Required fields are not allowed in proto3.

 reference :

http://maqiangthunder.github.io/2016/07/04/%E6%9D%82/gRPC/

https://github.com/geekan/grpc-python-demos/blob/master/helloworld/client.py

http://guojing.me/posts/grpc-python-bind-source-code-1/

 

 

1
0
分享到:
评论

相关推荐

    grpc-基于Python实现的grpc通信示例-附项目源码-优质项目实战.zip

    grpc_基于Python实现的grpc通信示例_附项目源码_优质项目实战

    gRPC-使用Cpp+Cmake编译gRPC工程示例-附项目源码+流程教程-优质项目实战.zip

    gRPC_使用Cpp+Cmake编译gRPC工程示例_附项目源码+流程教程_优质项目实战

    grpc-java:grpc java示例项目

    **gRPC Java 示例项目简介** gRPC 是一个高性能、开源且通用的 RPC(远程过程调用)框架,它基于 Google 的 Protocol Buffers (protobuf) 技术,支持多种语言,包括 Java。本项目是一个 gRPC Java 示例项目,旨在...

    grpc各语言使用官方示例代码.rar

    5. **gRPC 实战**: - **服务发现**:可能涉及服务注册和发现,例如使用 Envoy 或 Istio 进行服务网格管理。 - **健康检查**:示例可能包括如何集成 gRPC 的健康检查机制,确保服务的稳定运行。 - **错误处理和...

    深入浅出gRPC-李林峰.zip

    10. **最佳实践与案例分析**:提供实际项目中的gRPC应用示例,分享如何设计和优化gRPC服务的实战经验。 通过阅读《深入浅出gRPC》,读者不仅可以学习到gRPC的基础知识,还能掌握如何在实际项目中有效利用gRPC提升...

    gRPC: Up and Running

    2. 实战示例:通过Go、Java、Node.js和Python的代码示例,演示如何创建和使用gRPC服务,包括服务端实现、客户端调用、认证和授权等。 3. 高级特性:讨论gRPC的元数据、负载均衡、服务发现、健康检查等高级功能,...

    3gRPC.rar3gRPC.rar3gRPC.rar

    1. gRPC实战.pptx:这可能是一个关于gRPC实际应用的演示文稿,通常会包含gRPC的工作原理、如何搭建服务、如何创建客户端和服务端、以及最佳实践等内容。 2. nginx-1.17.8.zip:这是一个Nginx服务器的版本1.17.8的...

    2gRPC2gRPC2gRPC2gRPC

    gRPC是一种高性能、开源、通用的RPC框架,它..."gRPC实战.pptx"和"Zhaoxi.AspNetCore31.AuthDemo"这两个资源将深入探讨gRPC的实践应用,尤其是与ASP.NET Core 3.1框架的结合,对于学习和理解gRPC技术有着极大的帮助。

    Go-使用grpcgo和python的双向流式RPC的快速演示

    本项目"Go-使用grpcgo和python的双向流式RPC的快速演示"是一个实战教程,旨在帮助开发者了解如何在Go和Python之间实现双向流式RPC。下面将详细介绍其中涉及的关键知识点: 1. **gRPC基础知识**:gRPC基于ProtoBuf...

    Python库 | dapr-ext-grpc-dev-1.0.0rc3.dev312.tar.gz

    8. 示例和实战:通过实际的代码示例,学习如何在项目中应用dapr-ext-grpc-dev,从服务定义到部署运行。 为了充分利用这个库,开发者需要具备扎实的Python编程基础,对gRPC和protobuf有深入理解,并且熟悉微服务架构...

    quarkus-grpc-web

    如何在Quarkus中使用Grpc Web 该示例演示了如何在gRPC Web上使用quarkus-grpc扩展。 在此示例中,将grpcwebtext的Google变体与grpcwebtext (等同于plaintext gRPC)一起使用。 该示例演示了一元流和服务器端流。 在...

    gRPC 关于c#的demo,如何定义变量,以及接口服务用法

    这个示例项目是关于在C#中使用gRPC的实战演示,涵盖了如何定义服务接口、protobuf消息类型以及如何在C#代码中实现这些接口。 1. **protobuf文件定义**: - gRPC 使用Protocol Buffers(protobuf)作为其序列化机制...

    grpc发送spangrpc发送spangrpc发送spangrpc发送spangrpc发送span

    - "otgrpc"很可能是一个示例或者库,用于在GRPC中实现OpenTracing功能。可能包含客户端和服务器端的示例代码,以及如何配置和使用tracing中间件的指南。 - 这个文件可能包含了如何创建和传播span,以及如何记录和...

    基于maven项目,简单尝试了下grpc-java.zip

    【描述解析】:“java实战”这一描述表明,这个项目是一个实际操作的Java项目,可能包含了一些具体的实现案例或示例代码,用于展示如何在实际开发环境中应用gRPC和Maven。这种实战经验对于学习和理解如何在Java项目...

    latihan-grpc-java

    gRPC是一种高性能、开源、通用的RPC框架,它由Google设计并推广,旨在连接微服务。...在Java环境中使用gRPC,可以实现高效...同时,学习如何将gRPC集成到Spring Boot或其他的Java框架中,也是提升gRPC实战能力的重要一步。

    python配置grpc环境

    为了验证 gRPC 环境是否配置成功,可以使用 gRPC 的官方示例。首先,克隆 gRPC 的 GitHub 仓库: ``` git clone https://github.com/grpc/grpc ``` 然后,导航到 Python 示例目录并运行服务器和客户端脚本: `...

    spring-boot-grpc-example

    《Spring Boot与gRPC实战:一个详尽的示例解析》 在当今的微服务架构中,Spring Boot以其强大的功能和简洁的配置,已经成为Java开发者首选的开发框架。而gRPC,作为Google推出的高性能、开源的RPC框架,利用...

    gprc-在windows-x64上构建gprc示例-包括服务端和客户端-附项目源码+流程教程-优质项目实战.zip

    gprc_在windows_x64上构建gprc示例_包括服务端和客户端_附项目源码+流程教程_优质项目实战

    internal-season-client:gRPC节点客户端调用内部季节服务

    五、实战示例 以`internal-season-client-master`为例,这是一个gRPC客户端的源码仓库,可能包含了以下关键文件: - `season.proto`:定义了季节服务的接口和消息类型。 - `tsconfig.json`:TypeScript配置文件。 - ...

    Web逆向实战之protobuf

    在 Web 逆向实战中,protobuf 是一种常用的数据交换格式,特别是在 gRPC 等高性能 RPC 框架中。protobuf 允许开发者定义数据结构,然后使用 protocol buffer 编译器生成相应的代码,以便在不同的语言和平台上进行...

Global site tag (gtag.js) - Google Analytics