apache/dubbo

使用多注册中心集群会进入ZoneAwareClusterInvoker.doInvoke方法中对所有注册中心进行负载均衡,会将所有Invoke强转为MockClusterInvoker<T>类型

Open

#7,313 建立於 2021年3月3日

在 GitHub 查看
 (1 留言) (0 反應) (0 負責人)Java (26,453 fork)batch import
help wanted

倉庫指標

Star
 (41,524 star)
PR 合併指標
 (平均合併 7天 14小時) (30 天內合併 20 個 PR)

描述

Environment

  • Dubbo version: 2.7.6
  • Operating System version: window10
  • Java version: 1.8

Steps to reproduce this issue

使用多注册中心集群会进入ZoneAwareClusterInvoker.doInvoke方法中对所有注册中心进行负载均衡,会将所有Invoke强转为MockClusterInvoker类型,dubbo的具体解释(FIXME, the invoker is a cluster invoker representing one Registry, so it will automatically wrapped by MockClusterInvoker.) 由于自己对Cluster进行了扩展,我提供的ClusterInvoker和dubbo自身的MockClusterInvoker同为Invoker的子类,所以会有类型转换异常。 image 不使用扩展的cluster时的invoker都是MockClusterInvoker类型: image 使用扩展的cluster时的invoker都是ClusterInvoker类型: image 强转时发生解析异常: java.lang.ClassCastException: com.common.util.rpc.dubbo.invoker.ClusterInvoker cannot be cast to org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker

首先,为什么在ZoneAwareClusterInvoker类中会耦合MockClusterInvoker,其次这边把所有Invoke强转为MockClusterInvoker类型,是不是会对Cluster的扩展产生影响? image image

貢獻者指南