apache / apache/dubbo

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

Open
#7,313 1 comment 0 reactions 0 assignees View on GitHub
help wanted
Dominant language
Java
Stars
41.6k
Forks
26.4k
Avg merge
15h 13m
Merged PRs (30d)
4

Description

### 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](https://user-images.githubusercontent.com/53166168/109776936-1bbb2c00-7c3e-11eb-8f38-447ede9e4088.png)
不使用扩展的cluster时的invoker都是MockClusterInvoker类型:
![image](https://user-images.githubusercontent.com/53166168/109777825-16aaac80-7c3f-11eb-9abb-5c023ecc62ab.png)
使用扩展的cluster时的invoker都是ClusterInvoker类型:
![image](https://user-images.githubusercontent.com/53166168/109777856-1ca08d80-7c3f-11eb-865e-9b303b841f17.png)
强转时发生解析异常:
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](https://user-images.githubusercontent.com/53166168/109777487-bb78ba00-7c3e-11eb-8124-c37e345bfa39.png)
![image](https://user-images.githubusercontent.com/53166168/109777534-ccc1c680-7c3e-11eb-9a7b-c4a7cc43d9d9.png)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.