feat: set default connection idle time for grpc servers (#1922)

* feat: set default connection idle time for grpc servers

* feat: add grpc health check
master
Kevin Wan 3 years ago committed by GitHub
parent 6b1e15cab1
commit ca88b69d24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,6 +7,7 @@ import (
"github.com/zeromicro/go-zero/core/stat"
"github.com/zeromicro/go-zero/zrpc/internal/serverinterceptors"
"google.golang.org/grpc"
"google.golang.org/grpc/health/grpc_health_v1"
)
type (
@ -71,9 +72,15 @@ func (s *rpcServer) Start(register RegisterFn) error {
WithStreamServerInterceptors(streamInterceptors...))
server := grpc.NewServer(options...)
register(server)
// register the health check service
grpc_health_v1.RegisterHealthServer(server, s.health)
s.health.Resume()
// we need to make sure all others are wrapped up,
// so we do graceful stop at shutdown phase instead of wrap up phase
waitForCalled := proc.AddWrapUpListener(func() {
s.health.Shutdown()
server.GracefulStop()
})
defer waitForCalled()

@ -1,10 +1,16 @@
package internal
import (
"time"
"github.com/zeromicro/go-zero/core/stat"
"google.golang.org/grpc"
"google.golang.org/grpc/health"
"google.golang.org/grpc/keepalive"
)
const defaultConnectionIdleDuration = time.Minute * 5
type (
// RegisterFn defines the method to register a server.
RegisterFn func(*grpc.Server)
@ -20,6 +26,7 @@ type (
baseRpcServer struct {
address string
health *health.Server
metrics *stat.Metrics
options []grpc.ServerOption
streamInterceptors []grpc.StreamServerInterceptor
@ -30,7 +37,11 @@ type (
func newBaseRpcServer(address string, rpcServerOpts *rpcServerOptions) *baseRpcServer {
return &baseRpcServer{
address: address,
health: health.NewServer(),
metrics: rpcServerOpts.metrics,
options: []grpc.ServerOption{grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: defaultConnectionIdleDuration,
})},
}
}

Loading…
Cancel
Save