You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "code4wt (GitHub)" <gi...@apache.org> on 2018/11/28 02:15:33 UTC
[GitHub] [incubator-dubbo] code4wt commented on issue #2837: InjvmProtocol isInjvmRefer 方法是不是有bug?
不算bug,只是逻辑上让人有点奇怪。当协议头为 injvm 时,Protocol 自适应拓展类会自动根据协议头加载指定的 Protocol 实现类。比如协议头为 injvm,就去加载 InjvmProtocol。自适应拓展类代码如下:
```java
public class Protocol$Adaptive implements com.alibaba.dubbo.rpc.Protocol {
// 省略一部分代码
public com.alibaba.dubbo.rpc.Invoker refer(java.lang.Class arg0, com.alibaba.dubbo.common.URL arg1)
throws com.alibaba.dubbo.rpc.RpcException {
if (arg1 == null) {
throw new IllegalArgumentException("url == null");
}
com.alibaba.dubbo.common.URL url = arg1;
// 获取协议头,默认为 dubbo
String extName = (url.getProtocol() == null ? "dubbo" : url.getProtocol());
if (extName == null) {
throw new IllegalStateException(
"Fail to get extension(com.alibaba.dubbo.rpc.Protocol) name from url(" + url.toString()
+ ") use keys([protocol])");
}
// 通过 SPI 加载指定的 Protocol,比如 extName = injvm 时,就去加载 InjvmProtocol
com.alibaba.dubbo.rpc.Protocol extension = (com.alibaba.dubbo.rpc.Protocol) ExtensionLoader
.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class).getExtension(extName);
return extension.refer(arg0, arg1);
}
}
```
[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2837 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org