package grpcx import ( "os" "path/filepath" "git.blueorigin.work/blueorigin/invoke/chain" "git.blueorigin.work/blueorigin/protobuf" "github.com/gogf/gf/contrib/registry/etcd/v2" "github.com/gogf/gf/contrib/rpc/grpcx/v2" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) var Endpoints = os.Getenv("ETCD_ENDPOINTS") var GrpcConfig *grpcx.GrpcServerConfig = grpcx.Server.NewConfig() func Etcd() *etcd.Registry { return etcd.New(Endpoints) } func SetOptions(o ...grpc.ServerOption) *grpcx.GrpcServerConfig { GrpcConfig.Options = append(GrpcConfig.Options, o...) return GrpcConfig } /** * 服务注册 * @param void * @author dc.To * @version 20250427 */ func Registry(f ...func(s *grpcx.GrpcServer)) *grpcx.GrpcServer { GrpcConfig.Options = append(GrpcConfig.Options, []grpc.ServerOption{ grpcx.Server.ChainUnary( grpcx.Server.UnaryValidate, chain.ClientContextUnaryChain, chain.ClientMetadataUnaryChain, )}..., ) if Endpoints != "" { grpcx.Resolver.Register(Etcd()) } if GrpcConfig.Name == "default" || GrpcConfig.Name == "" { GrpcConfig.Name = filepath.Base(os.Args[0]) } s := grpcx.Server.New(GrpcConfig) for _, fn := range f { fn(s) } Reflect(s.Server) return s } /** * grpc reflect * @author dc.To * @version 20250427 */ func Reflect(s reflection.GRPCServer, f ...func()) { if Endpoints == "" { reflection.Register(s) } for _, fn := range f { fn() } } /** * BSS 双向通信流 * @author dc.To * @version 20250410 */ func BssClient() protobuf.BssClient { return protobuf.NewBssClient(grpcx.Client.MustNewGrpcClientConn("api")) }