1 Star 0 Fork 0

Wsage/go-framework

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
client.go 1.79 KB
一键复制 编辑 原始数据 按行查看 历史
Wsage 提交于 2021-11-05 02:42 . !22新增 统一配置
package grpc
import (
"context"
"fmt"
v1etcd "gitee.com/scottq/go-framework/src/v1/clients/etcd"
"google.golang.org/grpc"
"google.golang.org/grpc/balancer"
"google.golang.org/grpc/balancer/base"
"google.golang.org/grpc/resolver"
"time"
)
type RemoteOption func(*RemoteConn) error
type RemoteConn struct {
name string
addr string
balanceName string
connTimeout int64
}
func NewRemoteConn(name string, addr string, options ...RemoteOption) (*grpc.ClientConn, error) {
defer func() {
if err := recover(); err != nil {
panic(fmt.Errorf("%s", err))
}
}()
rConn := &RemoteConn{
name: name,
addr: addr,
balanceName: "round_robin",
connTimeout: 10,
}
for _, opt := range options {
err := opt(rConn)
if err != nil {
return nil, err
}
}
return rConn.getClient()
}
func (conn *RemoteConn) getClient() (*grpc.ClientConn, error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(conn.connTimeout)*time.Second)
defer cancel()
serviceConfig := grpc.WithDefaultServiceConfig(fmt.Sprintf("{\"loadBalancingConfig\":[{\"%s\":{}}]}", conn.balanceName))
return grpc.DialContext(ctx, conn.addr, grpc.WithInsecure(), grpc.WithBlock(), serviceConfig)
}
func OptConnTimeout(d int64) RemoteOption {
return func(conn *RemoteConn) error {
conn.connTimeout = d
return nil
}
}
func OptEtcdDiscovery(addr string) RemoteOption {
return func(conn *RemoteConn) error {
if addr == "" {
addr = conn.addr
}
d, err := v1etcd.NewServiceDiscovery(addr, 5)
if err != nil {
return err
}
resolver.Register(d)
b := &WeightBalance{}
balancer.Register(base.NewBalancerBuilder(b.Name(), b, base.Config{HealthCheck: true}))
conn.addr = fmt.Sprintf("%s://8.8.8.8/%s", d.Scheme(), conn.name)
conn.balanceName = b.Name()
return nil
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/scottq/go-framework.git
git@gitee.com:scottq/go-framework.git
scottq
go-framework
go-framework
v1.1.25

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385