java 调用多个第三方接口,汇总到一个接口

代码实现

  • 注释
  • /**
             * join()方法只能用于等待当前`CompletetableFuture` 的异步任务完成并返回值,如果还有其他异步任务需要等待,并发执行,
             * 需要每个`CompletableFuture`调用一次`.join()`方法,这样会导致代码很冗长。
             *
             * .allOf().join()方法可以等待多个`CompletableFuture`都执行完之后再返回结果。
             * 这是因为,`allOf()`方法接收一个`CompletableFuture`数组或可变参数,并返回一个新的`CompletableFuture`,
             * 该`CompletableFuture`将在所有输入所有`CompletableFuture`完成后完成。
             * 调用`allOf().join()`方法可以等待该`CompletableFuture`完成并返回结果。
             * 所以`.allOf().join()`方法更加适用于等待多个异步任务并行执行的情况。
             *
             * 因此,如果只有一个异步任务,可以使用`.join()`方法;测试:平均1.8s左右
             * 如果有多个异步任务,可以使用`.allOf().join()`方法。测试:平均2.0s左右
             */
  • 代码示例
  • public PteIntermediateHttpVo getIntermediate1(PteIntermediateParam pteIntermediateParam) throws ExecutionException, InterruptedException {
    
            //使用CompletableFuture构建异步任务
            CompletableFuture<PteIntermediateHttpVo.Protect> protectFuture = CompletableFuture.supplyAsync(() -> {
                Map<String, String> param = new HashMap<>();
                String paramJson = JSONObject.toJSONString(param);
                JSONObject queryProtectLogic = HttpClientUtil.sendPostByJson(ProcessTechnologyHttpUrlEnum.QUERY_PROTECT_LOGIC.getUrl(), null, paramJson);
                if (null != queryProtectLogic) {
                    String protectResult = queryProtectLogic.getString("result");
                    logger.info("_protectResult:" + protectResult);
    
                    JSONObject protectDataJson = JSONObject.parseObject(protectResult);
                    String protectData = protectDataJson.getString("data");
                    logger.info("_protectData:" + protectData);
                    return JSONObject.parseObject(protectData, PteIntermediateHttpVo.Protect.class);
                }
                return null;
            });
    
          /**
            * 此处可调用多个接口方法,方法同上
            */
    
            CompletableFuture<List<PteIntermediateHttpVo.OperationalChangesDetail>> operationalChangesDetailListFuture = CompletableFuture.supplyAsync(() -> {
                Map<String, String> flangeMetaParam = new HashMap<>();
                flangeMetaParam.put("depLevel", pteIntermediateParam.getDepLevel() == null ? "" : pteIntermediateParam.getDepLevel());
                flangeMetaParam.put("unitName", pteIntermediateParam.getUnitName() == null ? "" : pteIntermediateParam.getUnitName());
                flangeMetaParam.put("changeDate", pteIntermediateParam.getChangeDate());
                flangeMetaParam.put("count", pteIntermediateParam.getCount());
                String operationDayDetailParamJson = JSONObject.toJSONString(flangeMetaParam);
                JSONObject queryOperationDayDetail = HttpClientUtil.sendPostByJson(ProcessTechnologyHttpUrlEnum.QUERY_OPERATION_DAY_DETAIL.getUrl(), null, operationDayDetailParamJson);
                if (null != queryOperationDayDetail) {
                    String queryOperationDayDetailResult = queryOperationDayDetail.getString("result");
                    logger.info("_queryOperationDayDetailResult:" + queryOperationDayDetailResult);
    
                    JSONObject queryOperationDayDetailJson = JSONObject.parseObject(queryOperationDayDetailResult);
                    String queryOperationDayDetailData = queryOperationDayDetailJson.getString("data");
                    logger.info("_queryOperationDayDetailData:" + queryOperationDayDetailData);
                    return JSONObject.parseArray(queryOperationDayDetailData, PteIntermediateHttpVo.OperationalChangesDetail.class);
                }
                return new ArrayList<>();
            });
    
           
            /*//等待所有异步任务执行完成
            PteIntermediateHttpVo.Protect finalProtect = protectFuture.join();
            PteIntermediateHttpVo.Protect finalSecurity = securityFuture.join();
            PteIntermediateHttpVo.OperationalChanges finalBlindPlate = blindPlateFuture.join();
            PteIntermediateHttpVo.OperationalChanges finalFlange = flangeFuture.join();
            PteIntermediateHttpVo.OperationalChanges finalApplyNozzle = applyNozzleFuture.join();
            PteIntermediateHttpVo.OperationalChanges finalOperationalChanges = operationalChangesFuture.join();
            List<PteIntermediateHttpVo.OperationalChangesDetail> finalOperationalChangesDetailList = operationalChangesDetailListFuture.join();
    
            return new PteIntermediateHttpVo() {{
                setProtect(finalProtect);
                setSecurity(finalSecurity);
                setBlindPlate(finalBlindPlate);
                setFlange(finalFlange);
                setApplyNozzle(finalApplyNozzle);
                setOperationalChanges(finalOperationalChanges);
                setOperationalChangesDetailList(finalOperationalChangesDetailList);
            }};*/
    
            //等待所有异步任务执行完成
            CompletableFuture.allOf(
                    protectFuture,
                    securityFuture,
                    blindPlateFuture,
                    flangeFuture,
                    applyNozzleFuture,
                    operationalChangesFuture,
                    operationalChangesDetailListFuture
            ).join();
    
            //构建响应对象
            return new PteIntermediateHttpVo(){{
                setProtect(protectFuture.get());
                setSecurity(securityFuture.get());
                setBlindPlate(blindPlateFuture.get());
                setFlange(flangeFuture.get());
                setApplyNozzle(applyNozzleFuture.get());
                setOperationalChanges(operationalChangesFuture.get());
                setOperationalChangesDetailList(operationalChangesDetailListFuture.get());
            }};
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值