4
0
invoke/grpcx/grpcx.go
2025-04-27 15:24:43 +08:00

76 lines
1.3 KiB
Go

package grpcx
import (
"os"
"git.linkiio.cn/linkpay/invoke/chain"
"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)) {
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)
s.Run()
}
/**
* grpc reflect
* @author dc.To
* @version 20250427
*/
func Reflect(s reflection.GRPCServer, f ...func()) {
if Endpoint == "" {
reflection.Register(s)
}
for _, fn := range f {
fn()
}
}
func Resolve[T any](value T, f func(T) T) T {
if f == nil {
return value
}
return f(value)
}