当前位置: 首页 > news >正文

hutool 作为http 客户端工具调用的一点点总结

场景一:客户端timeout 的时间给的很短


 //100毫秒
private static final int HTTP_TIMEOUT_MS = 1 * 100; 
response = HttpUtil.createPost(patrolresultconfirmUrl).body(JSONObject.toJSONString(search)).header("Authorization", token).timeout(HTTP_TIMEOUT_MS).executeAsync();


Caused by: java.net.SocketTimeoutException: Read timed out

场景二:服务端 返回的时间调的很长


客户端的时间timeout 给 30s
服务设置40s 的模拟延迟
Read timed out

场景问题
1.我们是调用方,我们不能奢望或者要求服务其它提供方的程序及时响应
我们可以通过调大客户端的timeout


举个例子: 联调环境日志


[ERROR | 2025-08-07 11:02:09.058 | pms-schedule-2] [c.q.i.t.l.s.i.CommonPushServiceImpl:251] 推送巡视设备可靠性指标报错:cn.hutool.http.HttpException: Read timed out,Read timed out 
[INFO | 2025-08-07 11:02:09.058 | pms-schedule-2] [c.q.i.t.j.PushPatrolDeviceReliability2XNJob:80] 结束巡视设备可靠性指标当前时间: 2025-08-07 11:02:09 
[ERROR | 2025-08-07 11:02:09.062 | pms-schedule-1] [c.q.i.t.l.s.i.CommonPushServiceImpl:216] 推送巡视设备在离线数据报错:cn.hutool.http.HttpException: Read timed out,Read timed out 
[INFO | 2025-08-07 11:02:09.062 | pms-schedule-1] [c.q.i.t.j.PushPatrolDeviceStatus2XNJob:48] 结束执行推送巡视设备状态定时任务当前时间: 2025-08-07 11:02:09 

客户端调用服务端接口进行推送,服务端没有及时返回,对面调试打debug 就会报出这样的错,和场景二 吻合


hutool 工具的异步问题怎么判断

    response = HttpUtil.createPost(patrolresultconfirmUrl).body(JSONObject.toJSONString(search)).header("Authorization", token).timeout(HTTP_TIMEOUT_MS).executeAsync();


executeAsync 这个是不是异步 循环调用两次,如果第二次需要等第一次调用后才调用就说明是 同步的

要等第一次执行完 才调用第二次,说明上面的实现是同步,怎么改就变成异步呢如下:

CompletableFuture.supplyAsync(() -> HttpUtil.createPost(patrolresultconfirmUrl).body(JSONObject.toJSONString(search)).header("Authorization", token).timeout(HTTP_TIMEOUT_MS).executeAsync());List<CompletableFuture<com.alibaba.fastjson.JSONObject>> futures = new ArrayList<>();
for (int i = 0; i < 2; i++) {CompletableFuture<com.alibaba.fastjson.JSONObject> future = CompletableFuture.supplyAsync(() -> stationSampleService.collectionSample(stationSampleReq));futures.add(future);
}
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));//收集所有结果
CompletableFuture<List<com.alibaba.fastjson.JSONObject>> allResultsFuture =  allFutures.thenApply(v -> {List<com.alibaba.fastjson.JSONObject> results = new ArrayList<>();for (CompletableFuture<com.alibaba.fastjson.JSONObject> future : futures) {results.add(future.join());}return results;
});

总结

超不超时 和单笔的req  resp 有关系,和调用多少次数没有关系

http://www.dtcms.com/a/329367.html

相关文章:

  • PG靶机 - PayDay
  • pt-online-schema-change 全解析:MySQL 表结构变更的安全之道
  • 编程的几点感悟
  • 【工具】雀语queyu文件批量下载 文档内容复刻导出
  • LeetCode 面试经典 150_数组/字符串_整数转罗马数字(18_12_C++_中等)(模拟)(对各位进行拆解)
  • 地球磁层全球MHD模型中模拟Dst指数的半经验方法
  • 在RHEL 9.X上安装 Docker最新版(28.3.3)
  • 嵌入式|VNC实现开发板远程Debian桌面
  • Spring 源码学习(十)—— DispatcherServlet
  • 专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载
  • 小迪23年-32~40——java简单回顾
  • Hive 创建事务表的方法
  • 机器学习-----DBSCAN算法
  • 进阶向:Python编写自动化邮件发送程序
  • C++多态:理解面向对象的“一个接口,多种实现”
  • [AXI5]AXI协议中awsize和awlen在Vector Atomic地址膨胀中的作用
  • PCIE 配置空间 拓展能力 定义
  • Linux编程 —— framebuffer
  • AJAX学习(2)
  • AI 创作系列(30)海狸 IM:小而全、易二开、快迭代
  • 八爪鱼和影刀的区别和优缺点
  • 【题解】[CQOI2006] 洛谷P4196 凸多边形 /【模板】半平面交
  • AI时代程序员的进化:从代码工人到创意架构师-优雅草卓伊凡引言:AI浪潮下的职业重构
  • Celery在Django中的应用
  • 排序总结---保研机试极限复习
  • 亚马逊聚焦战略2.0:从资源分散到价值聚焦的商业重构逻辑
  • 北京JAVA基础面试30天打卡09
  • Java面试宝典:ZGC
  • 【自动化运维神器Ansible】playbook主机清单变量深度解析:主机变量与组变量的实战应用
  • InfluxDB数据恢复