HttpClient5: 異步請求、回調函數(shù)、生產(chǎn)者-消費者模式

基本使用


        CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();

        httpClient.start();

        SimpleHttpRequest request = SimpleHttpRequests.get("http://httpbin.org/get");

        Future<SimpleHttpResponse> future = httpClient.execute(request, null);

        try {
            SimpleHttpResponse response = future.get();
            log.info("{}\t\t{}", response.getCode(), response.getBodyText());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

使用回調函數(shù)


        Future<SimpleHttpResponse> future = httpClient.execute(request, new FutureCallback<SimpleHttpResponse>() {
            @Override
            public void completed(SimpleHttpResponse response) {
                log.error("{} -> {}", request.getRequestUri(), response.getCode());
            }

            @Override
            public void failed(Exception e) {
                log.error("{} -> {}", request.getRequestUri(), e);
            }

            @Override
            public void cancelled() {
                log.info("{} cancelled", request.getRequestUri());
            }
        });

生產(chǎn)者-消費者 模式

        CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();

        httpClient.start();

        //生產(chǎn)者
        AsyncRequestProducer producer = AsyncRequestBuilder.get("http://httpbin.org/get").build();

        //消費者
        AbstractCharResponseConsumer<CloseableHttpResponse> consumer = new AbstractCharResponseConsumer<>() {

            CloseableHttpResponse response;

            @Override
            public void releaseResources() {

            }

            @Override
            protected int capacityIncrement() {
                return Integer.MAX_VALUE;
            }

            @Override
            protected void data(CharBuffer charBuffer, boolean b) throws IOException {
                log.info("-> {}", charBuffer);
            }

            @Override
            protected void start(HttpResponse httpResponse, ContentType contentType) throws HttpException, IOException {
                this.response = (CloseableHttpResponse) httpResponse;
            }

            @Override
            protected CloseableHttpResponse buildResult() throws IOException {
                return response;
            }
        };

        httpClient.execute(producer, consumer, new FutureCallback<CloseableHttpResponse>() {
            @Override
            public void completed(CloseableHttpResponse response) {
                log.info("-> {}", response.getCode());
            }

            @Override
            public void failed(Exception e) {
                log.info("-> {}", e);
            }

            @Override
            public void cancelled() {
                log.info("-> cancelled");
            }
        });
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容