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

2023-12-15 486 views
5

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的

image

回答

3

单个注册中心正常不

8

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

image 这个服务名是通过上下文获得 image 在执行org.apache.dubbo.rpc.proxy.InvocationUtil.invoke(invoker, rpcInvocation)方法时将放入上下文的 image invoker是在ReferenceConfig产生代理时传入的,在ReferenceConfig.createInvokerForRemote()时创建的

image

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

1

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

6

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

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

9

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