This commit is contained in:
kzkzzzz
2025-03-23 20:29:29 +08:00
parent 7e0bf82418
commit 9fd0eaadb8
14 changed files with 661 additions and 78 deletions

View File

@@ -63,7 +63,7 @@ func UseDefaultBufferCfg(v bool) Opt {
func WithRegistry(serviceName string, reg myregistry.IRegister) Opt {
return func(server *Server) {
server.serviceName = serviceName
server.serviceName = mygrpc.ServicePrefix + serviceName
server.reg = reg
}
}
@@ -81,7 +81,7 @@ func WithDelayStopMs(v int) Opt {
}
func SetFlag() {
pflag.Int("grpc.port", 18082, "listen port")
pflag.Int("grpc.port", 0, "listen port, 0 is random port")
pflag.String("grpc.log", "true", "enable request log")
}
@@ -109,7 +109,7 @@ func NewByConf(conf *Conf, opts ...Opt) *Server {
}
if s.logger == nil {
s.logger = mylog.GetLogger()
s.logger = mylog.GetLoggerSkip(-1)
}
if s.reg != nil && s.serviceName == "" {
@@ -142,7 +142,7 @@ func (s *Server) initServer() {
PermitWithoutStream: true, // 即使没有 active stream, 也允许 ping
}),
grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: time.Hour * 2, // 空闲连接时间
MaxConnectionIdle: time.Minute * 15, // 空闲连接时间
MaxConnectionAgeGrace: time.Second * 30, // 在强制关闭连接之间, 允许有 N 的时间完成 pending 的 rpc 请求
Time: time.Second * 20, // 如果一个连接空闲超过 N, 则发送一个 ping 请求
Timeout: time.Second * 5, // 如果 ping 请求 N 内未收到回复, 则认为该连接已断开
@@ -210,6 +210,12 @@ func (s *Server) Run(ctx context.Context) error {
if err != nil {
return err
}
log.Printf("[%s] register service: %s - %s:%d",
s.reg.Name(),
s.serviceRegInfo.ServiceName,
s.serviceRegInfo.Ip, s.serviceRegInfo.Port,
)
}
addr := fmt.Sprintf("%s:%d", s.serverConf.Addr, port)
@@ -230,6 +236,13 @@ func (s *Server) Stop() {
if err != nil {
s.logger.Errorf("grpc server deregister err: %s", err)
}
log.Printf("[%s] deregister service: %s - %s:%d",
s.reg.Name(),
s.serviceRegInfo.ServiceName,
s.serviceRegInfo.Ip, s.serviceRegInfo.Port,
)
}
// 如果使用k8s service, 关闭pod和往service注销ip是同时进行的, 如果退出服务比注销ip先完成, 可能有流量继续进来, 导致请求失败
@@ -270,7 +283,7 @@ func (s *Server) requestLog() grpc.UnaryServerInterceptor {
code = status.New(codes.Unknown, err.Error()).Code()
}
codeMsg = fmt.Sprintf("Error Code: %s(%d)", code.String(), uint32(code))
codeMsg = fmt.Sprintf("%s(%d)", code.String(), uint32(code))
}
s.logger.Infof(
@@ -287,7 +300,7 @@ func (s *Server) grpcRecover() grpc.UnaryServerInterceptor {
defer func() {
if err0 := recover(); err0 != nil {
log.Printf("%s - panic: %v\n%s", info.FullMethod, err0, debug.Stack())
err = fmt.Errorf("server err: %s - system err: %s", info.FullMethod, err0)
err = fmt.Errorf("server err %s - %s", info.FullMethod, err0)
}
}()