V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
longmeier90
V2EX  ›  Python

各位大佬有没有人用过 grpc , go 和 Python 项目互调过,有一个问题

  •  
  •   longmeier90 · 2022-02-23 12:15:05 +08:00 · 3123 次点击
    这是一个创建于 1002 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在搞微服务,学习了一下 grpc ,试着写了连个测试,发现一个问题

    go-client 无法调用 python-server 
    错误 error:code = Unimplemented desc = RPC method not implemented /Greeter/SayHello;
    
    但是  python-client 访问 python-server 、go-server 都没问题,go-client 访问 go-server 也没有问题。查了一下都说是包名称的不一样。我把两边的 proto 文件弄成一模一样重新生成也还是报这个 error
    
    --------python-------
    syntax = "proto3";
    package proto;
    service Greeter{
      rpc SayHello (HelloRequest) returns (HelloReply);
    }
    message HelloRequest{
      string name = 1;
    }
    message HelloReply{
      string message = 1;
    }
    --------go----------
    syntax = "proto3";
    option go_package = ".;proto";
    package proto;
    service Greeter{
      rpc SayHello (HelloRequest) returns (HelloReply);
    }
    message HelloRequest{
      string name = 1;
    }
    message HelloReply{
      string message = 1;
    }
    
    8 条回复    2022-02-23 14:41:22 +08:00
    leonme
        1
    leonme  
       2022-02-23 12:35:57 +08:00 via iPhone
    报错信息不是说 implement 问题吗?
    CEBBCAT
        2
    CEBBCAT  
       2022-02-23 12:41:53 +08:00 via iPhone
    我只是想问一下,这两边的 proto 文件是不是应该共享一个?
    longmeier90
        3
    longmeier90  
    OP
       2022-02-23 12:53:08 +08:00
    @CEBBCAT 怎么共享,两个项目有可能都不在同一台服务器上。
    longmeier90
        4
    longmeier90  
    OP
       2022-02-23 12:56:03 +08:00
    @leonme 是呀,我没指定包名称的时候 提示 RPC method not implemented /Greeter/SayHello ;当我指定包名称 proto 时提示 RPC method not implemented /protol.Greeter/SayHello 。就单单 go-client 无法调用 python-server;
    CEBBCAT
        5
    CEBBCAT  
       2022-02-23 13:01:33 +08:00
    @longmeier90 拿 message 举例,因为这些定义是大家都要用的,那么可以把 message 放到单独一个仓库,构建时引入,然后 protoc 编译

    另外查到了一个问题 https://stackoverflow.com/q/55922886
    masterclock
        6
    masterclock  
       2022-02-23 13:08:29 +08:00
    reflection 查看 python-server 端的 method 名字是什么
    log 、抓包等方法查看 go-client 发出的请求的 method

    不共享 proto 的 buf 的模式挺常见的,但确实麻烦
    https://docs.buf.build buf 用来集中管理很不错
    so1n
        7
    so1n  
       2022-02-23 13:33:03 +08:00
    你可以抽到一个 common 仓库里面,这个仓库用一个文件夹存 proto 文件 然后每次当一个版本进行提交,提交的时候使用工具或者 ci 在提交时顺便用工具生成对应语言的代码并打包(或者这个仓库就是一个包), 这样对应的语言就可以用到这个包了
    longmeier90
        8
    longmeier90  
    OP
       2022-02-23 14:41:22 +08:00
    貌似这个问题解决啦, 我把 python-server 服务的端口由 50051 -> 9400 ; go-client 就可以正常调用啦。有点搞呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:07 · PVG 04:07 · LAX 12:07 · JFK 15:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.