4
0
invoke/grpcx/grpcx.go
2025-08-07 10:03:10 +08:00

84 lines
1.6 KiB
Go

package grpcx
import (
"os"
"path/filepath"
"git.linkiio.cn/linkpay/invoke/chain"
"git.linkiio.cn/linkpay/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"))
}