HttpClient5: 异步请求、回调函数、生产者-消费者模式

基本使用


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

使用回调函数


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

生产者-消费者 模式

        CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();

        httpClient.start();

        //生产者
        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");
            }
        });
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容