in protocol/grpc/server.go [76:142]
func (s *Server) Start(url *common.URL) {
var (
addr string
err error
)
addr = url.Location
lis, err := net.Listen("tcp", addr)
if err != nil {
panic(err)
}
maxServerRecvMsgSize := constant.DefaultMaxServerRecvMsgSize
if recvMsgSize, convertErr := humanize.ParseBytes(url.GetParam(constant.MaxServerRecvMsgSize, "")); convertErr == nil && recvMsgSize != 0 {
maxServerRecvMsgSize = int(recvMsgSize)
}
maxServerSendMsgSize := constant.DefaultMaxServerSendMsgSize
if sendMsgSize, convertErr := humanize.ParseBytes(url.GetParam(constant.MaxServerSendMsgSize, "")); err == convertErr && sendMsgSize != 0 {
maxServerSendMsgSize = int(sendMsgSize)
}
// If global trace instance was set, then server tracer instance
// can be get. If not, will return NoopTracer.
tracer := opentracing.GlobalTracer()
var serverOpts []grpc.ServerOption
serverOpts = append(serverOpts,
grpc.UnaryInterceptor(otgrpc.OpenTracingServerInterceptor(tracer)),
grpc.StreamInterceptor(otgrpc.OpenTracingStreamServerInterceptor(tracer)),
grpc.MaxRecvMsgSize(maxServerRecvMsgSize),
grpc.MaxSendMsgSize(maxServerSendMsgSize),
)
tlsConfig := config.GetRootConfig().TLSConfig
if tlsConfig != nil {
var cfg *tls.Config
cfg, err = config.GetServerTlsConfig(&config.TLSConfig{
CACertFile: tlsConfig.CACertFile,
TLSCertFile: tlsConfig.TLSCertFile,
TLSKeyFile: tlsConfig.TLSKeyFile,
TLSServerName: tlsConfig.TLSServerName,
})
if err != nil {
return
}
logger.Infof("Grpc Server initialized the TLSConfig configuration")
serverOpts = append(serverOpts, grpc.Creds(credentials.NewTLS(cfg)))
} else {
serverOpts = append(serverOpts, grpc.Creds(insecure.NewCredentials()))
}
server := grpc.NewServer(serverOpts...)
s.grpcServer = server
go func() {
providerServices := config.GetProviderConfig().Services
if len(providerServices) == 0 {
panic("provider service map is null")
}
// wait all exporter ready , then set proxy impl and grpc registerService
waitGrpcExporter(providerServices)
registerService(providerServices, server)
reflection.Register(server)
if err = server.Serve(lis); err != nil {
logger.Errorf("server serve failed with err: %v", err)
}
}()
}