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

2022-02-23 12:15:05 +08:00
 longmeier90

最近在搞微服务,学习了一下 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;
}
2999 次点击
所在节点    Python
8 条回复
leonme
2022-02-23 12:35:57 +08:00
报错信息不是说 implement 问题吗?
CEBBCAT
2022-02-23 12:41:53 +08:00
我只是想问一下,这两边的 proto 文件是不是应该共享一个?
longmeier90
2022-02-23 12:53:08 +08:00
@CEBBCAT 怎么共享,两个项目有可能都不在同一台服务器上。
longmeier90
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
2022-02-23 13:01:33 +08:00
@longmeier90 拿 message 举例,因为这些定义是大家都要用的,那么可以把 message 放到单独一个仓库,构建时引入,然后 protoc 编译

另外查到了一个问题 https://stackoverflow.com/q/55922886
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
2022-02-23 13:33:03 +08:00
你可以抽到一个 common 仓库里面,这个仓库用一个文件夹存 proto 文件 然后每次当一个版本进行提交,提交的时候使用工具或者 ci 在提交时顺便用工具生成对应语言的代码并打包(或者这个仓库就是一个包), 这样对应的语言就可以用到这个包了
longmeier90
2022-02-23 14:41:22 +08:00
貌似这个问题解决啦, 我把 python-server 服务的端口由 50051 -> 9400 ; go-client 就可以正常调用啦。有点搞呀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX