github.com/infraboard/keyauth@v0.8.1/protocol/grpc.go (about)

     1  package protocol
     2  
     3  import (
     4  	"fmt"
     5  	"net"
     6  
     7  	"github.com/infraboard/mcube/app"
     8  	"github.com/infraboard/mcube/logger"
     9  	"github.com/infraboard/mcube/logger/zap"
    10  	"google.golang.org/grpc"
    11  
    12  	"github.com/infraboard/keyauth/apps/micro"
    13  	auther "github.com/infraboard/keyauth/common/interceptor/grpc"
    14  	"github.com/infraboard/keyauth/conf"
    15  	"github.com/infraboard/mcube/grpc/middleware/recovery"
    16  )
    17  
    18  // NewGRPCService todo
    19  func NewGRPCService() *GRPCService {
    20  	log := zap.L().Named("GRPC Service")
    21  
    22  	rc := recovery.NewInterceptor(recovery.NewZapRecoveryHandler())
    23  	grpcServer := grpc.NewServer(grpc.ChainUnaryInterceptor(
    24  		rc.UnaryServerInterceptor(),
    25  		auther.GrpcAuthUnaryServerInterceptor(),
    26  	))
    27  
    28  	return &GRPCService{
    29  		svr:   grpcServer,
    30  		l:     log,
    31  		c:     conf.C(),
    32  		micro: app.GetGrpcApp(micro.AppName).(micro.ServiceServer),
    33  	}
    34  }
    35  
    36  // GRPCService grpc服务
    37  type GRPCService struct {
    38  	svr *grpc.Server
    39  	l   logger.Logger
    40  	c   *conf.Config
    41  
    42  	micro micro.ServiceServer
    43  }
    44  
    45  // Start 启动GRPC服务
    46  func (s *GRPCService) Start() error {
    47  	// 装载所有GRPC服务
    48  	app.LoadGrpcApp(s.svr)
    49  
    50  	// 启动HTTP服务
    51  	lis, err := net.Listen("tcp", s.c.App.GRPCAddr())
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	s.l.Infof("GRPC 服务监听地址: %s", s.c.App.GRPCAddr())
    57  	if err := s.svr.Serve(lis); err != nil {
    58  		if err == grpc.ErrServerStopped {
    59  			s.l.Info("service is stopped")
    60  		}
    61  
    62  		return fmt.Errorf("start service error, %s", err.Error())
    63  	}
    64  
    65  	return nil
    66  }
    67  
    68  // Stop 停止GRPC服务
    69  func (s *GRPCService) Stop() error {
    70  	s.l.Info("start grpc graceful shutdown ...")
    71  	// 优雅关闭HTTP服务
    72  	s.svr.GracefulStop()
    73  	return nil
    74  }