当前位置: 首页 > 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.lryc.cn/news/620034.html

相关文章:

  • 理解RESTful架构:构建优雅高效的Web服务
  • 《Unity Shader入门精要》学习笔记一
  • Dimensional Analysis量纲分析入门
  • 【Excel】被保护的文档如何显示隐藏的行或列
  • MongoDB 入门指南二:索引 —— 让查询速度飞起来
  • 随想记-excel报表美化
  • 选择排序专栏
  • 使用 6 种方法将文件从 Android 无缝传输到iPad
  • C# 反射和特性(获取Type对象)
  • 攒钱学概论:5、创业术
  • window显示驱动开发—DirectX 9 资源创建
  • 《AVL树的原理与C++实现:详解平衡二叉搜索树的高效构建与操作》
  • 【自动化运维神器Ansible】playbook主机清单变量深度解析:主机变量与组变量的实战应用
  • JavaWeb-Servlet基础
  • CodeBuddy在AI开发方面的一些特色
  • 1.Cursor快速入门与配置
  • PyTorch Tensor完全指南:深度学习数据操作的核心艺术
  • Matlab(4)
  • C++ stack and queue
  • 【OSPP 开源之夏】Good First issue 第一步—— openEuler Embedded 计划
  • 机器视觉的零件误差检测系统:基于多角度点云融合的圆柱体零件尺寸测量
  • 5. synchronized 关键字 - 监视器锁 monitor lock
  • InnoDB如何解决脏读、不可重复读和幻读的?
  • mysql - 查询重复数据,不区分大小重复问题解决
  • 服务器查看 GPU 占用情况的方法
  • 安全点(Safepoint)完成后唤醒暂停线程的过程
  • 响应式对象的类型及其使用场景
  • 量子安全新纪元:F5发布全新AI驱动的全栈式后量子加密AI安全方案
  • 破解测试数据困境:5招兼顾安全与真实性
  • 全球AI安全防护迈入新阶段:F5推出全新AI驱动型应用AI安全解决方案