rpc error: code = Unimplemented desc =

本文记录了在Go语言环境下使用grpc遇到的'rpcerror:code=Unimplementeddesc='错误。问题根源在于proto文件中的package名与代码中import的package名称不一致。解决方案是确保两者名称匹配。通过检查proto文件和import语句,修复包名后,错误得到解决。

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 resp
 33 }

使用 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, err
 83     }
 84     return out, nil
 85 }
   ...........
    
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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值