in tablestore/src/main/java/com/alicloud/openservices/tablestore/core/OperationLauncher.java [98:168]
protected void asyncInvokePost(
OTSUri actionURI,
Map<String, String> queryParameters,
Message message,
TraceLogger traceLogger,
ResponseConsumer<Res> consumer,
FutureCallback<Res> callback)
{
URI uri = buildURI(actionURI, queryParameters);
HttpPost request = new HttpPost(uri);
if (logger.isDebugEnabled()) {
logger.debug("Operation: {}, PBRequestMessage: {}, TraceId: {}",
actionURI, message.toString(), traceLogger.getTraceId());
}
byte[] content = message.toByteArray();
if (config.isEnableRequestCompression() && content != null && content.length > 0) {
int contentLength = content.length;
try {
content = CompressUtil.compress(
new ByteArrayInputStream(content),
new Deflater());
request.addHeader(OTS_HEADER_REQUEST_COMPRESS_TYPE, OTS_COMPRESS_TYPE);
request.addHeader(
OTS_HEADER_REQUEST_COMPRESS_SIZE, Integer.toString(contentLength));
} catch (IOException e) {
throw new ClientException("RequestCompressFail: " + e.getMessage());
}
}
/**
* Integrate with the link tracking system
*/
Object rpcContext = null;
if(config.isEnableRequestTracer()){
if(config.getRequestTracer() == null){
throw new ClientException("RequestTracer should not be null when enable RequestTracer");
}
String methodName = request.getMethod();
String action = actionURI.getAction();
RequestTracer.StartRequestTraceInfo startRequestTraceInfo = new RequestTracer.StartRequestTraceInfo(instanceName, action, methodName);
config.getRequestTracer().startRequest(startRequestTraceInfo); // Indicates the start of an Rpc call, set the service name and method name
rpcContext = config.getRequestTracer().getRpcContext();
}
if (content == null) {
content = new byte[0];
}
request.setEntity(new ByteArrayEntity(content));
String contentMd5 = Base64.toBase64String(BinaryUtil.calculateMd5(content));
// build a wrapper for HttpRequestBase to store additional information
RequestMessage requestMessage = new RequestMessage(request);
requestMessage.setActionUri(actionURI);
requestMessage.setContentMd5(contentMd5);
requestMessage.setContentLength(content.length);
addRequiredHeaders(requestMessage, contentMd5, traceLogger.getTraceId());
ServiceCredentials credentials = crdsProvider.getCredentials();
ExecutionContext ctx = createContext(
actionURI, instanceName, credentials, config, rpcContext);
client.asyncSendRequest(requestMessage, ctx, consumer, callback, traceLogger, config.getRequestTracer(), rpcContext);
}