sofastack / sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
https://www.sofastack.tech/sofa-rpc/docs/Home
Apache License 2.0
3.81k stars 1.17k forks source link

如何实现动态标签路由呢 #1319

Closed MingJunDuan closed 1 year ago

MingJunDuan commented 1 year ago

Your question

应用在运行时,不停机给provider打标签,之后consumer通过自定路由Router实现动态标签路由,consumer端自定义Router有文档(https://www.sofastack.tech/projects/sofa-rpc/custom-router/),但是provider端怎么实现呢,有没有demo或者文档

describe your question clearly

Your scenes

describe your use scenes (why need this feature)

Your advice

describe the advice or solution you'd like

Environment

OrezzerO commented 1 year ago

可以让 provider 修改传递给注册中心的元数据,让 consumer 发现. 一般来说,这种元数据是provider 启动的时候就已经决定好的. 如果要不停机修改, 需要修改 registy 的实现, 或者引入第三方数据源.

EvenLjj commented 1 year ago

我们内部已经 mesh 化了,当在服务治理中心下发动态打标规则的时候,通过 mosn append 上动态标,并重新 repub 到注册中心来实现。可以考虑集成一个重新 repub 的方案,或者服务治理中心直接修改注册中心数据。

MingJunDuan commented 1 year ago

使用sofaboot,重写ProviderConfigContaner.addProviderConfig(),ProviderConfig.setParameter()进行设置,可以实现应用启动时将标签注册到注册中心,但感觉不是太优雅,不停机更换provider标签暂没找到解决方法,大家有其他好的解决方式可以讨论。

dajitui commented 1 year ago

我的思路是元数据应该是注册中心去管理,进行更新,客户端去拉取元数据配置 可以根据nacos元数据进行动态更新,直接在页面进行操作,应该也有接口可以调用更改nacos元数据

dajitui commented 1 year ago

我了解到的如果是k8s的标签应该是打进镜像里面的,不好改,具体是什么场景需要动态修改标签呢

chuailiwu commented 1 year ago

建议先补充下这个需求的场景再来评估方案