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 }