go - 未实现的 desc = 未知服务 pb.AuthService 我的简单例份验证服务器上出现错误

标签 go microservices grpc rpc

我用 Golang 创建了一个简单的身份验证服务器。这是我的 .proto 文件:

syntax = "proto3";

package auth;

option go_package = "./pkg/pb";

service AuthService {
    rpc Register(RegisterRequest) returns (RegisterResponse) {}
    rpc Login(LoginRequest) returns (LoginResponse) {}
    rpc Validate(ValidateRequest) returns (ValidateResponse) {}
}

// Register
message RegisterRequest {
    string name = 1;
    string surname = 2;
    string email = 3;
    string password = 4;
}
message RegisterResponse {
    int64 status = 1;
    string error = 2;
}

// Login
message LoginRequest {
    string email = 1;
    string password = 2;
}
message LoginResponse {
    int64 status = 1;
    string error = 2;
    string token = 3;
}

// Validate
message ValidateRequest {
    string token = 1;
}
message ValidateResponse {
    int64 status = 1;
    string error = 2;
    int64 userID = 3;
}

我有 2 个文件,auth_grpc.pb.go 和 auth.pb.go

我想向我的客户注册,但是当我提出此请求时,会出现此错误。 我到处寻找 pb.AuthService 但我没有这个函数或实例。

这是我的 main.go 文件:

func main() {
    env, err := config.LoadConfig()
    if err != nil {
        log.Fatalln("FAILED AT CONFIG: ", err)
    }

    h := db.Init(env.DBUrl)

    jwt := utils.JwtWrapper{
        SecretKey:       env.JWTSecretKey,
        Issuer:          "go-grpc-auth-svc",
        ExpirationHours: 24 * 365,
    }

    s := services.Server{
        H:   h,
        Jwt: jwt,
    }

    grpcServer := grpc.NewServer()
    pb.RegisterAuthServiceServer(grpcServer, &s)

    lis, err := net.Listen("tcp", env.Port)
    if err != nil {
        log.Fatalln("Failed to listing:", err)
    }
    fmt.Printf("start gRPC server on %s", lis.Addr().String())

    if err := grpcServer.Serve(lis); err != nil {
        log.Fatalln("Failed to serve:", err)
    }
}

和 auth.go 文件。我尝试实现 jwt 和数据库处理程序:

type Server struct {
    H   db.Handler
    Jwt utils.JwtWrapper
    pb.UnimplementedAuthServiceServer
}

func (s *Server) Register(ctx context.Context, req *pb.RegisterRequest) (*pb.RegisterResponse, error) {...}

我尝试向我的客户端注册,我的客户端文件和我的服务器一样简单。

我的服务客户端结构:

type ServiceClient struct {
    Client pb.AuthServiceClient
}

我的 main.go 文件:


func main() {
    c, err := config.LoadConfig()
    if err != nil {
        log.Fatalln("Failed at config: ", err)
    }

    // ROUTER INSTANCE
    router := gin.Default()

    // MIDDLEWARES
    router.Use(middlewares.ErrorHandler)

    auth.RegisterRoutes(router, &c)

    router.Run(c.Port)
}

并注册路由文件:

func RegisterRoutes(r *gin.Engine, c *config.Config) *ServiceClient {
    svc := &ServiceClient{
        Client: InitServiceClient(c),
    }

    routes := r.Group("/auth")
    routes.POST("/register", svc.Register)
    routes.POST("/login", svc.Login)
    fmt.Println(svc)
    return svc
}

func (svc *ServiceClient) Register(ctx *gin.Context) {
    routes.Register(ctx, svc.Client)
}

func (svc *ServiceClient) Login(ctx *gin.Context) {
    routes.Login(ctx, svc.Client)
}

最佳答案

我查看了您的 github 存储库(因为您发布的代码中没有明显的问题)。

client auth.proto 您指定:

package pb;

但是在 the service它是:

package auth;

所以错误 unknown service pb.AuthService是因为您的服务器提供 auth.AuthService (而不是您的客户期望的pb.AuthService)。更改您的.proto文件,以便它们保持一致(或者,理想情况下,引用相同的文件)。

关于go - 未实现的 desc = 未知服务 pb.AuthService 我的简单例份验证服务器上出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76870104/

相关文章:

Gorm Associations BeforeCreate 回调未按预期工作

go - 使用Go创建Office 365 Outlook邮箱

c# - 使用该数据库跟踪微服务中的数据库架构更改

java - Java 项目中使用 GRPC 和 GlassFish 的 Netty 问题

c - C/Go 中的 LDAP : Error code 53 "Server is unwilling to perfom" when trying to set unicodePwd

docker - 如何使用main.go在文件夹内构建带有本地包的docker镜像?

javascript - 每次生产 Kafka 消息时都需要连接吗?

node.js - 如何解析微服务世界中书籍的作者姓名?

sql - 使用 SQL 和 gRPC 时如何使用 Scan 和 Value?

java - AWS 网络负载均衡器 (NLB) 是否支持 ALPN?