feat: rpc add health check function configuration optional (#2288)

* feat: rpc add health check function configuration optional

* update config field name
master
MarkJoyMa 2 years ago committed by GitHub
parent 1c85d39add
commit 040c9e0954
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -19,6 +19,8 @@ type (
// setting 0 means no timeout // setting 0 means no timeout
Timeout int64 `json:",default=2000"` Timeout int64 `json:",default=2000"`
CpuThreshold int64 `json:",default=900,range=[0:1000]"` CpuThreshold int64 `json:",default=900,range=[0:1000]"`
// grpc health check switch
Health bool `json:",default=true"`
} }
// A RpcClientConf is a rpc client config. // A RpcClientConf is a rpc client config.

@ -16,6 +16,7 @@ type (
rpcServerOptions struct { rpcServerOptions struct {
metrics *stat.Metrics metrics *stat.Metrics
health bool
} }
rpcServer struct { rpcServer struct {
@ -74,13 +75,17 @@ func (s *rpcServer) Start(register RegisterFn) error {
register(server) register(server)
// register the health check service // register the health check service
grpc_health_v1.RegisterHealthServer(server, s.health) if s.health != nil {
s.health.Resume() grpc_health_v1.RegisterHealthServer(server, s.health)
s.health.Resume()
}
// we need to make sure all others are wrapped up, // we need to make sure all others are wrapped up,
// so we do graceful stop at shutdown phase instead of wrap up phase // so we do graceful stop at shutdown phase instead of wrap up phase
waitForCalled := proc.AddWrapUpListener(func() { waitForCalled := proc.AddWrapUpListener(func() {
s.health.Shutdown() if s.health != nil {
s.health.Shutdown()
}
server.GracefulStop() server.GracefulStop()
}) })
defer waitForCalled() defer waitForCalled()
@ -94,3 +99,10 @@ func WithMetrics(metrics *stat.Metrics) ServerOption {
options.metrics = metrics options.metrics = metrics
} }
} }
// WithRpcHealth returns a func that sets rpc health switch to a Server.
func WithRpcHealth(health bool) ServerOption {
return func(options *rpcServerOptions) {
options.health = health
}
}

@ -35,9 +35,13 @@ type (
) )
func newBaseRpcServer(address string, rpcServerOpts *rpcServerOptions) *baseRpcServer { func newBaseRpcServer(address string, rpcServerOpts *rpcServerOptions) *baseRpcServer {
var h *health.Server
if rpcServerOpts.health {
h = health.NewServer()
}
return &baseRpcServer{ return &baseRpcServer{
address: address, address: address,
health: health.NewServer(), health: h,
metrics: rpcServerOpts.metrics, metrics: rpcServerOpts.metrics,
options: []grpc.ServerOption{grpc.KeepaliveParams(keepalive.ServerParameters{ options: []grpc.ServerOption{grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: defaultConnectionIdleDuration, MaxConnectionIdle: defaultConnectionIdleDuration,

@ -40,6 +40,7 @@ func NewServer(c RpcServerConf, register internal.RegisterFn) (*RpcServer, error
metrics := stat.NewMetrics(c.ListenOn) metrics := stat.NewMetrics(c.ListenOn)
serverOptions := []internal.ServerOption{ serverOptions := []internal.ServerOption{
internal.WithMetrics(metrics), internal.WithMetrics(metrics),
internal.WithRpcHealth(c.Health),
} }
if c.HasEtcd() { if c.HasEtcd() {

Loading…
Cancel
Save