sponge icon indicating copy to clipboard operation
sponge copied to clipboard

增加透传 etcd 参数配置的选项

Open soluty opened this issue 9 months ago • 1 comments

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方法, 这样感觉有点混乱.

soluty avatar Mar 16 '25 07:03 soluty

上面代码的函数 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
}

zhufuyi avatar Mar 18 '25 14:03 zhufuyi