这段代码已经优化一版了,但是感觉还能优化?可以帮忙提个思路吗?
优化之后的代码如下:
protected void internalConsume(Command cmd) {
//进入客户端时更新超时消息
updateTimeoutMsgWhenEnterAdapter(cmd);
Buffer contentBuffer = null;
NCBuilder nb = NCBuilder.builder().cmd(cmd).build();
try {
//1.初始化参数
initParameters(nb);
//如果版本是2005之后走这个逻辑
if(NcVersion.isNCC2005AfterVersion(nb.getVersion())){
nclog.debug("Call " + nb.getVersion() +"u begin, senderId is " + cmd.getSenderID());
Map<String, String> headerMap = initHeaderMap(nb);
//2.获取token
//获取参数的接口,不需要获取token。
if (judgeRequestAccount(nb.getNcAcctContext())) {
handleParametersRequest(nb, headerMap, RETRYNUM);
} else {
Boolean accountCodeIsNull = checkAccountCode(nb);
//获取token
if (!accountCodeIsNull) {
getToken(nb, tokenRes -> {
if (tokenRes.succeeded()) {
//3.获取token成功拼到header里,请求业务接口
Token token = tokenRes.result();
headerMap.put("access_token", token.getAccess_token());
headerMap.put("security_key", token.getSecurity_key());
//请求业务接口 RETRYNUM 重试次数默认为3
handleNCCBusinessRequest(nb, headerMap, RETRYNUM);
} else {
//处理失败结果
handleResult(nb.getCmd(), nb.isAsyn(), null, StatusCode.GATEWAY_EXECUTE_FAIL,
tokenRes.cause());
}
});
}
}
return;
}
if (!nb.isGet()) {
Objects.requireNonNull(nb.getNcAcctContext(), "ncAcctContext can't be null");
byte[] datas = nb.getNcAcctContext().toString().getBytes(StandardCharsets.UTF_8);
contentBuffer = Buffer.buffer(datas);
}
} catch (Exception e) {
//解析参数异常
cmd.fail(vertx, StatusCode.PARAMETER_ERROR.getValue(), e.getMessage());
log(cmd, null, StatusCode.PARAMETER_ERROR.getValue(), e);
return;
}
//打印适配器收到请求的日志
printAdapterRequestLog(nb);
//2005之前的处理逻辑
handleRequest(nb, contentBuffer, RETRYNUM);
}