feat: rpc add health check function configuration optional (#2288)
* feat: rpc add health check function configuration optional * update config field name
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user