84 lines
1.6 KiB
Go
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"))
|
|
}
|