實現java非阻塞http請求的兩種方式


1.okhttp

public void okhttp() {
    Request request = new Request.Builder()
        .url()
        .post(RequestBody.create(MediaType.parse("application/json"), content))
        .build();

      OkHttpClient client = new OkHttpClient.Builder()
          .connectionPool(new ConnectionPool(50, 5, TimeUnit.MINUTES))
          .readTimeout(5, TimeUnit.SECONDS)
          .connectTimeout(5, TimeUnit.SECONDS)
          .build();

      client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
          log.info("error:" + e.toString());
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
          log.info("success:" + response.body().string());
        }
      });
  }

2.webClient

public static Mono<String> webClient(){
        ReactorClientHttpConnector connector = new ReactorClientHttpConnector(
                options -> options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)
                        .compression(true)
                        .afterNettyContextInit(ctx -> {
                            ctx.addHandlerLast(new ReadTimeoutHandler(3000, TimeUnit.MILLISECONDS));
                        }));

        WebClient client = WebClient.builder()
                    .defaultHeader(HttpHeaders.CONTENT_TYPE, API_MIME_TYPE)
                    .defaultHeader(HttpHeaders.USER_AGENT, USER_AGENT)
                    .clientConnector(connector)
                    .build();
     return client.get()
                .uri()
                .retrieve()
                .bodyToMono(String.class)
                .doOnError(e -> logger.info("error:" + e))
                .doOnSuccess(result -> logger.info("result" + result));
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM