starlight icon indicating copy to clipboard operation
starlight copied to clipboard

java.lang.RuntimeException: protocol not exist, type=1

Open FancyJan opened this issue 5 years ago • 3 comments

client样例中的代码是这样给出的: RpcClient rpcClient = new RpcClient(serviceUrl, clientOption, interceptors);

但实际运行的时候出现了下面的代码在new RpcClient的时候没有走到的情况: ExtensionLoaderManager.getInstance().loadAllExtensions("UTF-8");

导致出现java.lang.RuntimeException: protocol not exist, type=1的报错(1对应baidustd协议)

FancyJan avatar Mar 17 '20 03:03 FancyJan

如果并行地去创建RpcClient的实例的话,会有问题。或者是否可以修改一下RpcClient中对于ExtensionLoaderManager是否初始化完全的判断?

FancyJan avatar Mar 17 '20 08:03 FancyJan

@FancyJan 我知道原因了,是因为并行new RpcClient时,没抢到ExtensionLoaderManager加载的线程没有去等待extension加载完成。这里需要优化下。RpcClient一般建议在系统启动时,去加载。请问你们是什么场景,需要在运行时,实时new RpcClient?

wenweihu86 avatar Mar 19 '20 03:03 wenweihu86

场景是服务启动的时候需要加载多个不同rpc服务的RpcClient,为了提高启动效率采用了并行。所以会并行去new几个RpcClient。现在依靠把LoadAllExtensions放到并行new RpcClient之前解决了这个问题。

FancyJan avatar Mar 22 '20 08:03 FancyJan