六安网站制作找哪家,多媒体展厅,太原如何做百度的网站,ppt设计教程网前面提到过#xff0c;重试是靠ClusterInvoker来保证的#xff0c;不同的Cluster在调用失败的时候 做不同处理 比如默认的FailoverClusterInvoke的doInvoke方法里面#xff1a;int len getUrl().getMethodParameter(invocation.getMethodName(), Constants.RETRIES_KEY, Co…前面提到过重试是靠ClusterInvoker来保证的不同的Cluster在调用失败的时候 做不同处理 比如默认的FailoverClusterInvoke的doInvoke方法里面int len getUrl().getMethodParameter(invocation.getMethodName(), Constants.RETRIES_KEY, Constants.DEFAULT_RETRIES) 1;这个RETRIES_KEY就是重试次数在后面的代码for (int i 0; i len; i)这个就是用来在出现异常的时候是继续调用还是做其他处理这个不同的ClusterInvoker实现是不同的。比如FailoverClusterInvoker里面就是吞掉异常继续调用除非次数用完才真正抛出异常。 有个问题是经常调用方已经调用了结果本地dubbo超时继续又调用一次可能导致consumer那边调用了两次所以一般都是重试都是业务代码控制的。为啥这样还是因为FailoverClusterInvoker不区分超时Excpetion虽然有不同错误码但是如果是timeoutException还是会继续重试 另外if (i 0) { checkWhetherDestroyed(); copyinvokers list(invocation); // check again checkInvokers(copyinvokers, invocation);} 这一句表示如果第一次调用失败那么需要重新做一次list也就是通过ListInvokerT invokers directory.list(invocation);return invokers;让directory去注册中心重新拿一次有可能这个时候provider已经发生变化 转载于:https://www.cnblogs.com/notlate/p/10090867.html