package grpc import ( "fmt" "log" "net" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) type GrpcService interface { Register(srv *grpc.Server) } type Config struct { Address string Port int AppName string } var rpc *grpc.Server var conf *Config func Init(config *Config) *grpc.Server { if config == nil { config = &Config{ Address: "", Port: 0, AppName: "dev", } } conf = config if rpc == nil { rpc = grpc.NewServer(grpc.MaxRecvMsgSize(1024*1024), grpc.MaxSendMsgSize(1024*1024)) } return rpc } func IPAddress() string { return conf.Address } func Port() int { return conf.Port } func Start() { //注册反射 用于grpcurl调试 reflection.Register(rpc) // grpc服务启动 go func() { addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", conf.Address, conf.Port)) if err != nil { log.Fatal("net.ResolveTCPAddr", err) } if addr.IP.String() != conf.Address { conf.Address = addr.IP.String() } if addr.Port != conf.Port { conf.Port = addr.Port } log.Printf("starting grpc service on %s:%d", addr.IP, addr.Port) lis, err := net.ListenTCP("tcp", addr) if err != nil { log.Fatal("fail to open port: ", err) } defer lis.Close() err = rpc.Serve(lis) if err != nil { log.Fatal("fail to open microservice: ", err) } }() }