2026-06-23 11:53:00 +08:00

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)
}