grpc client 报错: code = Unimplemented desc = method *** not implemented

摘要:
=nil{//此服务与您的侦听器关联,以便外部世界可以访问log.Fatalf}}。报告错误:客户端。gopackagemainimportconstfuncmain(){conn,err:=grpc.Dialifer!=nil{log.Fatalf}defeconn。Close()c:=pb NewGrpcServiceClient//返回一个客户端连接,您可以通过该连接访问相应的服务资源,例如对象//联系服务器并打印其响应。ctx,cancel:=上下文。WithTimeout//返回客户端,超时设置为延迟取消()r,错误:=c。Fun//访问相应服务器上的服务方法ifer=nil{log.Fatalf}fmt。Println}以上是一个成功的案例!调试期间发生错误:could notrpc:rperror:code=Unimplementeddesc=methodFunnotimplemented,*grpcT。grpcServiceClient后来找到了错误的原因,并且服务器中的方法写得不正确。

今天做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

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

免责声明:文章转载自《grpc client 报错: code = Unimplemented desc = method *** not implemented》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA编程-------------------18、两队比赛关键字和保留字下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

go-grpc 基本使用

gRPC是什么? gRPC是什么可以用官网的一句话来概括 A high-performance, open-source universal RPC framework 所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用...

使用命名管道承载gRPC,以及适用场景

最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC的主要优点:# 现代高性能轻量级 RPC 框架。 协定优先 API 开发,默认使用协议缓冲区,允...

进行API开发选gRPC还是HTTP APIs?

上一篇文章我带着大家体验了一把《ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)》,如果有兴趣的可以点击链接进行查看,相信跟着做的你,也是可以跑起来的。这篇文章我们将一起来探讨下gRPC服务如何与HTTP APIs进行比较。用于为应用程序提供API的技术是一个重要的选择,与HTTP API相比,gRPC提供了独特的优势。本文从gRPC的...

Protobuf + gRPC Android Studio接入指南

  一.添加protobuf-gradle-plugin插件 1.项目根目录build.gradle里添加: buildscript { repositories { mavenCentral() } dependencies { classpath 'com.google.protobuf:protobuf-gradle-pl...

go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

go微服务框架kratos学习笔记六(kratos 服务发现 discovery) 目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批量获取实例 nodes 批量获取节点 renew 心跳 cance...

Go-kit介绍及构建微服务

Go-kit简介   Go-kit 并不是一个微服务框架,而是一套微服务工具集,我们可以用工具Go-kit为 Go 创建微服务,包含包和接口,有点类似于JAVA Spring Boot,但是没那么强大。可以利用Go-kit提供的API和规范可以创建健壮的,可维护性高的微服务体系,它提供了用于实现系统监控和弹性模式组件的库,例如日志记录、跟踪、限流和熔断等,...