29 lines
926 B
Go
29 lines
926 B
Go
// Package grpcserver owns the shared gRPC process wiring used by backend services.
|
|
package grpcserver
|
|
|
|
import (
|
|
"time"
|
|
|
|
"google.golang.org/grpc"
|
|
"hyapp/pkg/grpcshutdown"
|
|
"hyapp/pkg/logx"
|
|
)
|
|
|
|
const defaultGracefulStopTimeout = 15 * time.Second
|
|
|
|
// New creates the standard unary gRPC server used by owner services.
|
|
// Business services still register protobuf handlers themselves; this helper only centralizes runtime middleware.
|
|
func New(serviceName string, options ...grpc.ServerOption) *grpc.Server {
|
|
base := []grpc.ServerOption{grpc.UnaryInterceptor(logx.UnaryServerInterceptor(serviceName))}
|
|
base = append(base, options...)
|
|
return grpc.NewServer(base...)
|
|
}
|
|
|
|
// GracefulStop drains in-flight RPCs with the same timeout behavior across services.
|
|
func GracefulStop(server *grpc.Server, timeout time.Duration) {
|
|
if timeout <= 0 {
|
|
timeout = defaultGracefulStopTimeout
|
|
}
|
|
grpcshutdown.GracefulStop(server, timeout)
|
|
}
|