4
0
invoke/grpcx/grpcx.go
2025-04-29 18:27:54 +08:00

79 lines
1.4 KiB
Go

package grpcx
import (
"os"
"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 Endpoint = os.Getenv("ETCD_ENDPOINTS")
var GrpcConfig *grpcx.GrpcServerConfig = grpcx.Server.NewConfig()
func Etcd() *etcd.Registry {
return etcd.New(Endpoint)
}
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 Endpoint != "" {
grpcx.Resolver.Register(Etcd())
}
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 Endpoint == "" {
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"))
}