代码结构
├── README.md
├── client.go # grpc客户端调用
├── config.go # 配置结构
├── resolver.go # 地址解析
└── server.go # grpc服务端调用
数据结构
基本结构
type BasicConfig struct {
DialTimeout int `toml:"dial_timeout"` // 连接超时时间,默认5秒
EndPoints []string `toml:"endpoints"` // etcd的地址
Prefix string `toml:"prefix"` // etcd服务的路径前缀,区分环境用
Debug bool `toml:"debug"` // 使用debug模式,打印详细的etcd交互日志,很多,非调试不建议打开
}
grpc服务端用的配置
type NameConfig struct {
BasicConfig
Servers []string `toml:"servers"` // 注册的服务名称,可以是多个
Addr string `toml:"addr"` // 服务地址,可以是IP:PORT或者:PORT格式
TTL int64 `toml:"ttl"` // 租约超时时间,默认5秒
}
grpc客户端用的配置
type ResolverConfig struct {
BasicConfig
WatchServers []string `toml:"watch_servers"` // 依赖的服务名称
}
使用方法
grpc服务端
// demo
&config.EtcdName = {
EndPoints:[]string{"127.0.0.1:2379"},
Prefix: "/ng/test/okash",
Servers: []string{"orders.Orders", "product.Product"},
Addr: ":8701",
}
etcdName, err := gfetcd.NameRegist(&config.EtcdName)
if err != nil {
panic(err)
}
defer etcdName.Unregister()
grpc客户端
// demo
&config.EtcdReslv{
EndPoints:[]string{"127.0.0.1:2379"},
Prefix: "/ng/test/okash",
WatchServers: []string{"product.Product"},
}
// 连接etcd
EtcdReslv, err = gfetcd.NewResolver(&config.EtcdReslv)
// 调用方法
err := EtcdReslv.Call(context.Background(), &XXXReq{}, &XXXResp{})