protected void asyncInvokePost()

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);
    }