欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

rpc error: code = Unimplemented desc =

发布时间:2023/12/20 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 rpc error: code = Unimplemented desc = 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

grpc 版本

在 go 语言场景下使用 grpc,编译 ok,运行的时候报错。
grpc 版本:1.40.0
go version: go1.16.10 linux/amd64

运行报错提示

"rpc error: code = Unimplemented desc ="

运行错误截图如下:

结论先行

引起上述错误的主要原因是自定义的 proto 文件中 package 的名字和代码中的 import 中的 package 名称不一致才导致的问题。
因此检查自定义的 proto 文件以及代码中引用(import)的文件名称,将二者改为一致即可。


后续的内容只是简单记录下发现错误过程而已。感兴趣的可以继续阅读。

错误调查

查看 proto 文件

package mypai; option go_package = "./;mypai";service mygrpc{rpc MyTestGrpcFunction(EmptyReq) returns (MyActiveTable) {} }message EmptyReq{} message MyActiveTable {repeated string idList = 1; }

grpcClient 部分代码

报错的位置是第 27 行处,其他部分代码截图如下:

3 import (4 "fmt"5 myapi "mycodes/egrpcProtoc/test"6 "time"7 "errors"8 )...........25 func TestMyTestGrpcFunction(req *myapi.EmptyReq) (resp *myapi.MyActiveTable) {26 if resp, err = grpcClient.MyTestGrpcFunction(req); err != nil {27 log.Logger.Error(err)28 }29 } else {30 log.Logger.Error(err)31 }32 return resp33 }

使用 grpc 工具生成的 *.pb.go 部分代码

3 package mypai...........72 type GrpcClient interface {73 MyTestGrpcFunction(in *EmptyRequest, opts ...grpc.CallOption) (*MyActiveTable, error)74 }...........78 func (c *grpcClient ) MyTestGrpcFunction(in *EmptyRequest, opts ...grpc.CallOption) (*MyActiveTable, error) {79 out := new(MyActiveTable)80 err := c.cc.Invoke(ctx, "/mypai_communication.myapi/MyTestGrpcFunction", in, out, opts...)81 if err != nil {82 return nil, err83 }84 return out, nil85 }...........112 type GrpcClient interface { 113 MyTestGrpcFunction(*EmptyRequest) (*MyActiveTable, error) 114 }...........123 func (*UnimplementedMypaiServer) MyTestGrpcFunction(*EmptyRequest) (*MyActiveTable, error) { 124 return nil, status.Errorf(codes.Unimplemented, "method MyTestGrpcFunctionnot implemented") 125 }

发现问题

截至此处,基本可以上可以确定代码问题所在,因为明显在自定义的 proto 中是定义有 MyTestGrpcFunction 接口方法的,但是运行却报错 Unimplemented ,再次 check 代码发现是 package 名称,在自定义的 proto 中是 mypai ,但是在代码使用中却用的是 myapi ,可以很明显的看出是不一样的。

参考

Error handling

总结

以上是生活随笔为你收集整理的rpc error: code = Unimplemented desc =的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。