feat: set default connection idle time for grpc servers (#1922)
* feat: set default connection idle time for grpc servers * feat: add grpc health check
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/zeromicro/go-zero/core/stat"
|
"github.com/zeromicro/go-zero/core/stat"
|
||||||
"github.com/zeromicro/go-zero/zrpc/internal/serverinterceptors"
|
"github.com/zeromicro/go-zero/zrpc/internal/serverinterceptors"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/health/grpc_health_v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@@ -71,9 +72,15 @@ func (s *rpcServer) Start(register RegisterFn) error {
|
|||||||
WithStreamServerInterceptors(streamInterceptors...))
|
WithStreamServerInterceptors(streamInterceptors...))
|
||||||
server := grpc.NewServer(options...)
|
server := grpc.NewServer(options...)
|
||||||
register(server)
|
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,
|
// 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()
|
||||||
server.GracefulStop()
|
server.GracefulStop()
|
||||||
})
|
})
|
||||||
defer waitForCalled()
|
defer waitForCalled()
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
package internal
|
package internal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/stat"
|
"github.com/zeromicro/go-zero/core/stat"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/health"
|
||||||
|
"google.golang.org/grpc/keepalive"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const defaultConnectionIdleDuration = time.Minute * 5
|
||||||
|
|
||||||
type (
|
type (
|
||||||
// RegisterFn defines the method to register a server.
|
// RegisterFn defines the method to register a server.
|
||||||
RegisterFn func(*grpc.Server)
|
RegisterFn func(*grpc.Server)
|
||||||
@@ -20,6 +26,7 @@ type (
|
|||||||
|
|
||||||
baseRpcServer struct {
|
baseRpcServer struct {
|
||||||
address string
|
address string
|
||||||
|
health *health.Server
|
||||||
metrics *stat.Metrics
|
metrics *stat.Metrics
|
||||||
options []grpc.ServerOption
|
options []grpc.ServerOption
|
||||||
streamInterceptors []grpc.StreamServerInterceptor
|
streamInterceptors []grpc.StreamServerInterceptor
|
||||||
@@ -30,7 +37,11 @@ type (
|
|||||||
func newBaseRpcServer(address string, rpcServerOpts *rpcServerOptions) *baseRpcServer {
|
func newBaseRpcServer(address string, rpcServerOpts *rpcServerOptions) *baseRpcServer {
|
||||||
return &baseRpcServer{
|
return &baseRpcServer{
|
||||||
address: address,
|
address: address,
|
||||||
|
health: health.NewServer(),
|
||||||
metrics: rpcServerOpts.metrics,
|
metrics: rpcServerOpts.metrics,
|
||||||
|
options: []grpc.ServerOption{grpc.KeepaliveParams(keepalive.ServerParameters{
|
||||||
|
MaxConnectionIdle: defaultConnectionIdleDuration,
|
||||||
|
})},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user