dubbo 多注册中心情况下添加group,拓展cluster找不到invoker's url中的对应元数据

0pizxfdo  于 21天前  发布在  其他
关注(0)|答案(7)|浏览(14)

dubbo:3.1.8
jdk:8
zookeeper:3.7.1

provider的Dubbo配置:

dubbo:
 registries:
    zonea:
      address: zookeeper://localhost:2182
      group: gray
    zoneb:
      address: zookeeper://localhost:2183
      group: gray

comsumer的Dubbo配置:

dubbo:
 registries:
    zonea:
      address: zookeeper://localhost:2182
      cluster: xxxcluster
      group: gray
    zoneb:
      address: zookeeper://localhost:2183
      cluster: xxxcluster
      group: gray

在provider的register指定了group,注册在zookeeper的信息都以/gray开头。但在暴露元数据信息时,serviceKey还是不带/gray的。在consumer自定义的cluster中去获取invoker的parameter,无法正常找到,因为consumer调用中认为serviceKey是带/gray的

vd8tlhqk

vd8tlhqk1#

单个注册中心正常不

xmjla07d

xmjla07d2#

单注册中心没有问题,原因多注册中心时,getProtocolServiceKey()方法返回的是带/gray的服务名

这个服务名是通过上下文获得

在执行org.apache.dubbo.rpc.proxy.InvocationUtil.invoke(invoker, rpcInvocation)方法时将放入上下文的

invoker是在ReferenceConfig产生代理时传入的,在ReferenceConfig.createInvokerForRemote()时创建的

多注册中心情况下产生的invoker url是会带上registry的group属性,导致元数据匹配不上,这样是存在问题的吧?

c90pui9n

c90pui9n3#

看起来是进了 cluster 模式的时候,group 被改成了 registry 的 group 了?

v8wbuo2f

v8wbuo2f4#

@AlbumenJ 是这样的,debug发现 请求调用时会调用拓展的多注册中心cluster的getUrl方法放入上下文

而url生成的过程 运用了registry url的属性

6ss1mwsb

6ss1mwsb5#

这个任务有人认领吗?没有的话,我认领下~

lmvvr0a8

lmvvr0a86#

@songxiaosheng 大佬,PR地址: #12406

2sbarzqh

2sbarzqh7#

@shaonianxingzhong 这样修改好像没有解决问题,"进了 cluster 模式的时候,group 被改成了 registry 的 group了", 有没有办法修复这个问题呢?

相关问题