CompletableFuture处理超时

news/2026/1/18 19:55:50/文章来源:https://www.cnblogs.com/dylan-bky/p/19499016

在当前的 BatchProcessingService 类中,所有异步任务均通过 CompletableFuture.supplyAsync() 提交,并使用了自定义的 taskExecutor 执行器。但目前 没有实现超时控制,即如果某个任务长时间不完成,也不会中断或返回超时结果。

public void processWithTimeout(BatchRequest request,Consumer<ProcessResult> callback,CompletableFuture<ProcessResult> completableFuture) {CompletableFuture<ProcessResult> future = CompletableFuture.supplyAsync(() -> businessService.dealBusiness(request), taskExecutor);// 超时 futureCompletableFuture<ProcessResult> timeoutFuture = CompletableFuture.supplyAsync(() -> {try {return future.get(5, TimeUnit.SECONDS); // 等待最多5秒} catch (TimeoutException e) {future.cancel(true); // 尝试取消原任务throw new CompletionException(new Exception("处理超时"));} catch (Exception e) {throw new CompletionException(e);}}, taskExecutor);timeoutFuture.whenComplete((result, throwable) -> {if (throwable != null) {ProcessResult errorResult = new ProcessResult(request.getId(),false,"处理失败: " + throwable.getMessage(),null,0,(Exception) throwable.getCause());callback.accept(errorResult);completableFuture.completeExceptionally(throwable);} else {callback.accept(result);completableFuture.complete(result);}});}
  • 手动 get(timeout) 控制增加超时处理

输入API的请求参数如下:

[{"id":"1"
},
{"id":"2"
},
{"id":"3"
},
{"id":"999"
}]
  • id为999的数据为超时处理
  • 模拟超时的业务代码如下所示:
// 模拟处理逻辑String id = request.getId();Integer idInt = Integer.valueOf(id) == null ? 0 : Integer.valueOf(id);// 模拟超时:当ID为特定值时,延迟较长时间if (StringUtils.isNoneBlank(id) && idInt == 999) { // 假设999表示需要超时测试try {Thread.sleep(10000); // 模拟10秒超时} catch (InterruptedException e) {Thread.currentThread().interrupt();return new ProcessResult(request.getId(),false,"处理被中断",null,-1,e);}}

2026-01-18-194839

完整代码见上一篇博文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+django的农贸市场摊位商户管理信息系统设计与实现

目录农贸市场摊位商户管理信息系统设计与实现摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;农贸市场摊位商户管理信息系统设计与实现摘要 该系统基于PythonDjango框架开发&#xff0c…

【时频分析】面向相交群延迟多分量信号的时频重分配同步挤压频域线性调频小波变换【含Matlab源码 14985期】复现含文献

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

【数字信号调制】AWGN信道BPSK和QPSK仿真(含BER分析)【含Matlab源码 14987期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

寒假学习笔记1.16

一、 内存间接寻址实现扩展寻址模式 直接寻址 vs 间接寻址 python原直接寻址:地址为立即数 def direct_addressing(addr): """直接寻址:[5] 表示内存地址5""" return MEMORY[int(addr…

【水果分类】计算机视觉和前馈神经网络自动水果分类系统【含Matlab源码 14978期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

寒假学习笔记1.15

一、 扩展指令集实现算术运算扩展 减法指令(SUB) python def sub(reg, source): """减法运算:reg = reg - source""" if source in REGISTERS: value = REGISTERS[source] elif sour…

技術演講的光環:台上講得精彩,台下代碼一團糟

技術演講的光環&#xff1a;台上講得精彩&#xff0c;台下代碼一團糟引言&#xff1a;技術界的海市蜃樓在現代科技產業的舞台上&#xff0c;一種奇特現象日益普遍&#xff1a;那些在會議講台上口若懸河、演講精彩絕倫的技術專家&#xff0c;他們的實際編碼能力與台上表現往往形…

机器学习优化投资组合压力测试

机器学习优化投资组合压力测试 关键词:机器学习、投资组合、压力测试、优化、风险评估 摘要:本文聚焦于利用机器学习技术优化投资组合压力测试。首先介绍了投资组合压力测试的背景知识,包括其目的、适用读者以及文档结构。接着阐述了相关核心概念,如投资组合、压力测试和机…

AI架构师进阶:模型评估的5大核心方法

AI架构师进阶&#xff1a;模型评估的5大核心方法 一、引言&#xff1a;为什么模型评估是AI架构师的“生死局”&#xff1f; 1. 一个扎心的钩子&#xff1a;你踩过模型评估的“坑”吗&#xff1f; 去年&#xff0c;我遇到一位AI架构师朋友的求助&#xff1a;他带领团队花了3个月…

英语_阅读_Baidus robotaxi_待读

Baidus robotaxi (无人驾驶出租车) is experiencing an order increase in Wuhan, Hubei Province, which has been drawing public attention and leading to heated discussions. 百度的无人驾驶出租车正在湖北省武汉…

基于Comsol软件的激光熔覆熔池流动数值模拟:考虑马兰戈尼对流及元素影响下表面张力系数的转变研究

基于Comsol软件的激光熔覆熔池流动数值模拟&#xff0c;考虑马兰戈尼对流&#xff0c;表面张力&#xff0c;重力&#xff0c;浮力等熔池驱动力&#xff0c;并且考虑S活性元素&#xff0c;使得表面张力系数在某一温度由正向负的转变&#xff0c;即马兰戈尼对流方向的改变导致表面…

基于yolo26的番茄成熟度识别 西红柿成熟度检测数据集 农产品品质分级自动化算法 农业生产中果实成熟度批量检测 深度学习图像分割第10412期

番茄分割图像识别 目标检测数据集说明! 一、数据集核心信息表项目详情类别数量及中文名称3 类&#xff08;成熟、半成熟、未成熟&#xff09;数据总量2200 张图片数据集格式YOLO 格式核心应用价值1. 用于果实成熟度目标检测模型训练&#xff1b;2. 支撑农产品品质分级自动化算法…

一款自动化的403/401绕过测试工具

工具介绍 一款自动化的403/401绕过测试工具&#xff0c;集成了路径规范化、请求头注入及谓词篡改等多种实战技巧。工具使用 python run.py -u http://xx.comrun.py import requests import argparse import urllib3 from urllib.parse import urlparse# 忽略 SSL 警告 urllib3.…

费雪的行业领导者理论:寻找市场冠军

费雪的行业领导者理论&#xff1a;寻找市场冠军关键词&#xff1a;费雪的行业领导者理论、市场冠军、行业分析、企业评估、投资策略摘要&#xff1a;本文围绕费雪的行业领导者理论展开&#xff0c;旨在深入剖析该理论如何助力投资者寻找市场冠军。首先介绍了理论提出的背景、目…

IP反查工具,能够快速查询指定IP/域名关联的所有网站

工具介绍 ReverseIP-CN 是一款专为中文网络环境优化的IP反查工具&#xff0c;能够快速查询指定IP/域名关联的所有网站&#xff0c;是网络安全检测、资产梳理的利器。工具使用 依赖包安装&#xff1a; pip install -r requirements.txt参数说明&#xff1a; 参数 全称 说明-u --…

详细介绍:【杂谈】-边缘计算竞赛:人工智能硬件缘何超越云端

详细介绍:【杂谈】-边缘计算竞赛:人工智能硬件缘何超越云端pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

XSS 漏洞练习靶场,覆盖反射型、存储型、DOM 型、SVG、CSP、框架注入、协议绕过等多种场景

工具介绍 XSS-Sec 靶场项目是一个以“实战为导向”的 XSS 漏洞练习靶场&#xff0c;覆盖反射型、存储型、DOM 型、SVG、CSP、框架注入、协议绕过等多种场景。页面样式统一&#xff0c;逻辑清晰&#xff0c;适合系统化学习与教学演示。 关卡总览&#xff08;名称与简介&#xf…

学长亲荐10个AI论文写作软件,MBA论文轻松搞定!

学长亲荐10个AI论文写作软件&#xff0c;MBA论文轻松搞定&#xff01; AI工具如何让论文写作不再“难” 在MBA学习过程中&#xff0c;论文写作往往是许多学生最头疼的环节。无论是开题报告、研究设计&#xff0c;还是最终的论文撰写&#xff0c;都需要大量的时间与精力投入。而…

java求职学习day49

Mybatis任务三&#xff1a;加载策略及注解开发一 MyBatis加载策略 1.1 什么是延迟加载&#xff1f; 问题 通过前面的学习&#xff0c;我们已经掌握了Mybatis中一对一&#xff0c;一对多&#xff0c;多对多关系的配置及实现&#xff0c;可以实现 对象的关联查询。实际开发过程中…

ubuntu 实现远程登录

ubuntu 实现远程登录一、创建用户sudo useradd -m jane二. 创建用户的主目录 adduser命令默认会为新用户创建一个主目录,例如/home/jane。 三. 设置文件权限 更改文件所有者 你可以使用chown命令来更改文件或目录的所…