sponge
sponge copied to clipboard
增加透传 etcd 参数配置的选项
Is your feature request related to a problem? Please describe. 我用sponge做一个新的服务, 通过etcd做注册发现, 和已有的系统配合使用, sponge的etcd封装的New方法本身支持不同的etcd选项, 而sponge封装的NewRegistry去掉了这个能力, 希望可以增加这个能力, 具体代码如下:
Describe the solution you'd like
func NewRegistry(etcdEndpoints []string, id string, instanceName string, instanceEndpoints []string, opts ...etcdcli.Option) (registry.Registry, *registry.ServiceInstance, error) {
serviceInstance := registry.NewServiceInstance(id, instanceName, instanceEndpoints)
cli, err := etcdcli.Init(etcdEndpoints, opts...)
if err != nil {
return nil, nil, err
}
// 这个new方法是支持传输etcd的属性的
return New(cli), serviceInstance, nil
}
并且在生成的test测试用例方法中, 又是调用的etcd.New方法, 这样感觉有点混乱.
上面代码的函数 New(cli) 传的不是etcd参数,是Registry的设置参数,只是这里使用默认参数,后面添加一个函数NewRegistryWithOptions 支持Registry参数设置,如下所示:
func NewRegistryWithOptions(etcdEndpoints []string, id string, instanceName string, instanceEndpoints []string, opts ...interface{}) (registry.Registry, *registry.ServiceInstance, error) {
serviceInstance := registry.NewServiceInstance(id, instanceName, instanceEndpoints)
var etcdOptions []etcdcli.Option
var registryOptions []Option
for _, opt := range opts {
switch v := opt.(type) {
case etcdcli.Option:
etcdOptions = append(etcdOptions, v)
case Option:
registryOptions = append(registryOptions, v)
default:
return nil, nil, fmt.Errorf("unknown option type: %T", v)
}
}
cli, err := etcdcli.Init(etcdEndpoints, etcdOptions...)
if err != nil {
return nil, nil, err
}
return New(cli, registryOptions...), serviceInstance, nil
}