in hugegraph-rpc/src/main/java/org/apache/hugegraph/rpc/RpcConsumerConfig.java [154:185]
protected SofaResponse doInvoke(SofaRequest request)
throws SofaRpcException {
List<ProviderInfo> providers = this.getRouterChain()
.route(request, null);
List<SofaResponse> responses = new ArrayList<>(providers.size());
List<SofaRpcException> excepts = new ArrayList<>(providers.size());
for (ProviderInfo provider : providers) {
try {
SofaResponse response = this.doInvoke(request, provider);
responses.add(response);
} catch (SofaRpcException e) {
excepts.add(e);
LOG.warn("{}.(error {})", e.getMessage(), e.getErrorType());
}
}
if (responses.size() > 0) {
/*
* Just choose the first one as result to return, ignore others
* TODO: maybe more strategies should be provided
*/
return responses.get(0);
} else if (excepts.size() > 0) {
throw excepts.get(0);
} else {
assert providers.isEmpty();
String method = methodName(request);
throw new SofaRpcException(RpcErrorType.CLIENT_ROUTER,
"No service provider for " + method);
}
}