weibocom / motan

A cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.
Other
5.88k stars 1.78k forks source link

[Bug] 在这个方法中 ClusterSupport.doRefreshReferersByUrls #1053

Open LaoZhang-best opened 9 months ago

LaoZhang-best commented 9 months ago

我使用consul暴露的是kubernetes的service别名,如果我启动了两个pod,那在referers中会存在两个一模一样的对象,加上netty的长连接,导致请求只会路由到固定的Pod上面。在getExistinReferer方法中,是否可以加入consul node的区分

rayzhang0603 commented 9 months ago

Motan是长链接服务,不适合使用service别名进行负载均衡,建议使用ip进行服务发现。

getExistingReferer方法是为了复用已存在的referer,在小规模节点变化时不用重新建连所有server节点,这个方法是对比的server节点的url对象,server节点url中任何参数有变动都不再复用referer。

如果你们的场景必须使用service别名,可以参考ConsulRegistry自己实现一个定制的consul注册中心,在每次服务变更,生成URL时在URL参数中加入例如时间戳这种动态变化的参数,就会触发每次重新构建referer了。

实现SPI扩展可以参考编写一个motan扩展