## 代码结构 ``` shell ├── README.md ├── client.go # grpc客户端调用 ├── config.go # 配置结构 ├── resolver.go # 地址解析 └── server.go # grpc服务端调用 ``` ## 数据结构 ### 基本结构 ``` golang 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服务端用的配置 ``` golang type NameConfig struct { BasicConfig Servers []string `toml:"servers"` // 注册的服务名称,可以是多个 Addr string `toml:"addr"` // 服务地址,可以是IP:PORT或者:PORT格式 TTL int64 `toml:"ttl"` // 租约超时时间,默认5秒 } ``` ### grpc客户端用的配置 ``` golang type ResolverConfig struct { BasicConfig WatchServers []string `toml:"watch_servers"` // 依赖的服务名称 } ``` ## 使用方法 ### grpc服务端 ``` golang // 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客户端 ```golang // 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{}) ```