zoukankan      html  css  js  c++  java
  • grpc client 报错: code = Unimplemented desc = method *** not implemented

    今天做grpc 简单的例子:

    grpcT.proto

    syntax = "proto3";
    option go_package = "/grpcT;grpcT";
    package grpcT;
    service GrpcService {
      rpc Fun(RequestData) returns (ResponseData){}
    }
    message RequestData {
      string repT = 1;
      int64 r = 2;
    }
    
    message ResponseData {
      string resT = 1;
      int64 code = 2;
    }

    生成文件:

    命令

    protoc --go_out=plugins=grpc:.grpcT.proto
    或者 protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpcT.proto

    server.go

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"net"
    
    	pb "studyGo/grpcServer/grpcT"
    
    	"google.golang.org/grpc"
    )
    
    const (
    	port = ":50051"
    )
    
    type server struct { //服务的结构类型
    	*pb.UnimplementedGrpcServiceServer
    }
    
    func (s *server) Fun(ctx context.Context, in *pb.RequestData) (*pb.ResponseData, error) {
    	fmt.Println("-------%d,===%s", in.R, in.RepT)
    	return &pb.ResponseData{ResT: "aaa", Code: 200}, nil
    }
    
    func (s *server) A(ctx context.Context, in *pb.RequestData) (*pb.ResponseData, error) {
    	fmt.Println("-------%d,===%s", in.R, in.RepT)
    	return &pb.ResponseData{ResT: "aaa", Code: 200}, nil
    }
    
    func main() {
    	lis, err := net.Listen("tcp", port) //开启监听
    	if err != nil {
    		log.Fatalf("failed to listen: %v", err)
    	}
    	s := grpc.NewServer()                      //新建一个grpc服务
    	pb.RegisterGrpcServiceServer(s, &server{}) //这个服务和上述的服务结构联系起来,这样你新建的这个服务里面就有那些类型的方法
    	if err := s.Serve(lis); err != nil {       //这个服务和你的监听联系起来,这样外界才能访问到啊
    		log.Fatalf("failed to serve: %v", err)
    	}
    }

    出现报错: 

    client.go

    package main
    
    import (
        "context"
        "fmt"
        "log"
        "time"
    
        pb "studyGo/grpcServer/grpcT"
    
        "google.golang.org/grpc"
    )
    
    const (
        address = "localhost:50051"
    )
    
    func main() {
        conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
        if err != nil {
            log.Fatalf("did not connect: %v", err)
        }
        defer conn.Close()
        c := pb.NewGrpcServiceClient(conn) //返回一个client连接,通过这个连接就可以访问到对应的服务资源,就像一个对象
        // Contact the server and print out its response.
        ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second) //返回一个client,并设置超时时间
        defer cancel()
        r, err := c.Fun(ctx, &pb.RequestData{RepT: "aaa", R: int64(10)}) //访问对应的服务器上面的服务方法
        if err != nil {
            log.Fatalf("could not rpc: %v,%T", err, c)
        }
        fmt.Println(fmt.Sprintf("%v", r))
    }

    以上是成功的案例!

    调试过程出现了错误:could not rpc: rpc error: code = Unimplemented desc = method Fun not implemented,*grpcT.grpcServiceClient

    后来发现错误原因,server中的方法写错了。Fun 方法写错成其他的了,导致报错!

    排查过程中还有其他的错误点:

    1)pb中的package name 被修改,

    2)参考:https://stackoverflow.com/questions/56035027/rpc-error-code-unimplemented-desc-rpc-method-not-implemented

    3)参考:https://ask.csdn.net/questions/7138747

    主要还是配置问题,导致连接失败

  • 相关阅读:
    poj3264
    codevs4373 窗口==poj2823 Sliding Window
    BZOJ 3831
    1107 等价表达式
    codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析
    BZOJ 1050
    1294 全排列[多种]
    BZOJ 2456
    BZOJ 3725
    BZOJ 3043
  • 原文地址:https://www.cnblogs.com/Frange/p/14659626.html
Copyright © 2011-2022 走看看