kitex icon indicating copy to clipboard operation
kitex copied to clipboard

feat: 能否通过解析config从而得到 server 或 client 的 `[]Option`

Open StellarisW opened this issue 3 years ago • 16 comments

Is your feature request related to a problem? Please describe.

type: feature

设置server或client的配置时,一个配置选项需要使用一个 With...() 方法,

能否有一种方法能够通过配置文件,动态的得到多个 Option,即 []Option

Describe the solution you'd like

A clear and concise description of what you want to happen.

Describe alternatives you've considered

A clear and concise description of any alternative solutions or features you've considered.

Additional context

Add any other context or screenshots about the feature request here.

StellarisW avatar Feb 03 '23 09:02 StellarisW

感谢反馈! 你指的是框架支持从配置文件读取option,然后设置/更新吗?配置文件来定义option的方式确实可以提升易用性,我们记一个todo之后看看如何设计。 不过 client/server 级别的 option 其实是在初始化的时候传入的,动态更新的场景可能不太适用。

ppzqh avatar Feb 03 '23 11:02 ppzqh

感谢反馈! 你指的是框架支持从配置文件读取option,然后设置/更新吗?配置文件来定义option的方式确实可以提升易用性,我们记一个todo之后看看如何设计。 不过 client/server 级别的 option 其实是在初始化的时候传入的,动态更新的场景可能不太适用。

动态更新理解错了😂,我意思是初始化之前的配置的动态更新,这个动态更新是指通过配置文件中的字段删减,从而提供的 []Option 也不同, 比如 原来的配置文件里有 RpcTimeout 这个字段,那么会提供 client.WithRpcTimeout 这个Option,如果没有就不会提供这个Option

StellarisW avatar Feb 03 '23 11:02 StellarisW

ok 理解了

感谢反馈! 你指的是框架支持从配置文件读取option,然后设置/更新吗?配置文件来定义option的方式确实可以提升易用性,我们记一个todo之后看看如何设计。 不过 client/server 级别的 option 其实是在初始化的时候传入的,动态更新的场景可能不太适用。

动态更新理解错了😂,我意思是初始化之前的配置的动态更新,这个动态更新是指通过配置文件中的字段删减,从而提供的 []Option 也不同, 比如 原来的配置文件里有 RpcTimeout 这个字段,那么会提供 client.WithRpcTimeout 这个Option,如果没有就不会提供这个Option

ppzqh avatar Feb 03 '23 11:02 ppzqh

ok 理解了

感谢反馈! 你指的是框架支持从配置文件读取option,然后设置/更新吗?配置文件来定义option的方式确实可以提升易用性,我们记一个todo之后看看如何设计。 不过 client/server 级别的 option 其实是在初始化的时候传入的,动态更新的场景可能不太适用。

动态更新理解错了😂,我意思是初始化之前的配置的动态更新,这个动态更新是指通过配置文件中的字段删减,从而提供的 []Option 也不同, 比如 原来的配置文件里有 RpcTimeout 这个字段,那么会提供 client.WithRpcTimeout 这个Option,如果没有就不会提供这个Option

这个feature是否可以通过,如果可以的话我提个pr

StellarisW avatar Feb 03 '23 11:02 StellarisW

抱歉,周末没有看回复 这个需要和原本的配置结合起来设计,我们内部先讨论一下,有结论了会及时更新在这里。

ppzqh avatar Feb 06 '23 02:02 ppzqh

这个问题本质上是一个配置文件的解析器,当前option的种类很多,且类型差别很大,比如withMiddleware, withResolver。很难实现一个通用的,可扩展的解析方案。建议针对自己的项目去写一个简单的配置解析器。 如果是类似rpctimeout这种配置,之后我们会开源一个配置中心的接口,可以进行扩展。

ppzqh avatar Feb 07 '23 08:02 ppzqh

这个问题本质上是一个配置文件的解析器,当前option的种类很多,且类型差别很大,比如withMiddleware, withResolver。很难实现一个通用的,可扩展的解析方案。建议针对自己的项目去写一个简单的配置解析器。 如果是类似rpctimeout这种配置,之后我们会开源一个配置中心的接口,可以进行扩展。

目前的痛点就是如果项目当中多个rpc服务(服务端,客户端)的设置都不一样,需要写很多 WithOption 这类的代码,导致出现代码冗余,期待配置中心🥰

StellarisW avatar Feb 07 '23 09:02 StellarisW

之后计划开源的是一个 config manager 库,不是完整的「配置中心」(Config Center + Provider + Translator)。

考虑到每个使用者的配置情况差别可能很大,建议自己实现对应的 provider 和 translator。

可参考:https://www.cloudwego.io/zh/docs/kitex/tutorials/framework-exten/suite/ ,在 Options 方法中调用 provider 获得配置信息,再调用 Translator 将其转换成 []Option.

felix021 avatar Feb 08 '23 07:02 felix021

#973 我们在开发一些于开源配置中心集成的模块(已发布 config-nacos),用于支持服务治理配置,是否能满足你的需求?

felix021 avatar Oct 11 '23 03:10 felix021

#973 我们在开发一些于开源配置中心集成的模块(已发布 config-nacos),用于支持服务治理配置,是否能满足你的需求?

部分满足

看到配置选项只满足 service governance 相关, 希望能够支持最重要的 service discovery 相关配置, 比如 client 的 WithResolver(r discovery.Resolver) Option, WithTag(key, val string) Option, WithHostPorts(hostports ...string) Option 等选项

StellarisW avatar Oct 11 '23 03:10 StellarisW

了解。

你需要的这些能力,主要是配置项比较特殊,尤其是 Resolver,我们没法发布一个能解析出你自己开发的 Resolver 的模块。

以文件配置为例,比如文件中是

resolver=xxx

假如由 Kitex 发布一个文件配置加载模块,模块内是无法识别 "xxx" 应该对应具体哪个 resolver,还需要注入一个 ResolverFactory (例如实现 NewResolver(resolveName string) Resolver 方法)才行

felix021 avatar Oct 11 '23 05:10 felix021

你用的是什么配置中心?

felix021 avatar Oct 11 '23 05:10 felix021

了解。

你需要的这些能力,主要是配置项比较特殊,尤其是 Resolver,我们没法发布一个能解析出你自己开发的 Resolver 的模块。

以文件配置为例,比如文件中是

resolver=xxx

假如由 Kitex 发布一个文件配置加载模块,模块内是无法识别 "xxx" 应该对应具体哪个 resolver,还需要注入一个 ResolverFactory (例如实现 NewResolver(resolveName string) Resolver 方法)才行

开发者自行实现的 discovery.Resolver 肯定实现不出来, 但是可以实现社区已经开发好的 Resolver,如 github.com/kitex-contrib/registry-xxx/xxx_resolver.go 由用户指定社区实现开的配置文件中心类型,模块再根据指定类型解析到具体的 resolver

StellarisW avatar Oct 11 '23 05:10 StellarisW

你用的是什么配置中心?

没有固定的,不一定是某个特定的配置中心

StellarisW avatar Oct 11 '23 05:10 StellarisW

了解,

所以你期望的是一个 ClientSuite ,入参是一组配置(可以从任意配置源读取),转换成对应的 []client.Option

配置应当支持:

  • Resolver(registry-etcd, registry-nacos 等 kitex-contrib 已经支持的模块,以及直接指定 IP端口等)
  • Tag
  • ...

这个我们先记录下来

felix021 avatar Oct 11 '23 07:10 felix021

了解,

所以你期望的是一个 ClientSuite ,入参是一组配置(可以从任意配置源读取),转换成对应的 []client.Option

配置应当支持:

  • Resolver(registry-etcd, registry-nacos 等 kitex-contrib 已经支持的模块,以及直接指定 IP端口等)
  • Tag
  • ...

这个我们先记录下来

对的,感谢跟进

StellarisW avatar Oct 11 '23 08:10 StellarisW