一个grpcServer实现多个proto文件

本文介绍了如何在一个GRPC Server中同时处理来自不同proto文件的服务接口,包括api决策和api服务,展示了如何创建一个结构体并实现多个接口以注册到服务器,以及如何通过pb.go文件中的注册方法进行注册过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个GRPCServer实现多个proto文件

  1. 多个proto文件定义在同一个package包中
  2. 每个proto文件中的service不相同(多个接口)
  3. 注册GRPCServer的结构体需要实现多个proto文件中定义的接口的方法
  4. 注册GRPCServer时需要调用每个pb.go文件中的RegisterXXXXServer方法

举例

  • 第一个proto文件

    syntax = "proto3";
    
    package api;
    
    service Decision {
      rpc Decision(DecisionReq) returns (DecisionRes){}
    }
    
    message DecisionReq {
      string Headers = 1;
      int64 MemberId = 2;
    }
    
    message Error {
      string Error = 1;
      int64  Code = 2;
    }
    
    message DecisionRes {
      int64 Code = 1;
      Error Result = 2;
      int64  ResultType = 3;
      string RequestId = 4;
      int64 Timestamp = 5;
    }
    
  • 第二个proto文件

    syntax = "proto3";
    
    package api;
    
    service Api {
      // Sends a greeting
      rpc HelloWorld(HelloReq) returns (HelloRes) {}
    }
    
    message HelloReq {
      string Name = 1;
    }
    
    message HelloRes {
      string Res = 1;
    }
    
  • 注册server

    package handler
    
    import (
    	pb "api_server/handler/proto"
    	"google.golang.org/grpc"
    	"log"
    	"net"
    )
    
    var gServer = grpc.NewServer()
    
    type Api struct{} // 实现多个proto文件中定义的方法
    
    func Start(addr string) {
    	conn, err := net.Listen("tcp", addr)
    	if err != nil {
    		log.Fatalf("net listen err: %v", err)
    	}
    	pb.RegisterApiServer(gServer, &Api{}) // 多次注册
    	pb.RegisterDecisionServer(gServer, &Api{}) // 多次注册
    	gErr := gServer.Serve(conn)
    	if gErr != nil {
    		log.Fatalf("grpc server err:%v", err)
    	}
    }
    
    func Stop() {
    	gServer.GracefulStop()
    	log.Println("grpc server stop")
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值