java.lang.RuntimeException: protocol not exist, type=1
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协议)
如果并行地去创建RpcClient的实例的话,会有问题。或者是否可以修改一下RpcClient中对于ExtensionLoaderManager是否初始化完全的判断?
@FancyJan 我知道原因了,是因为并行new RpcClient时,没抢到ExtensionLoaderManager加载的线程没有去等待extension加载完成。这里需要优化下。RpcClient一般建议在系统启动时,去加载。请问你们是什么场景,需要在运行时,实时new RpcClient?
场景是服务启动的时候需要加载多个不同rpc服务的RpcClient,为了提高启动效率采用了并行。所以会并行去new几个RpcClient。现在依靠把LoadAllExtensions放到并行new RpcClient之前解决了这个问题。