批量发送请求后立即返回线程的处理结果(不阻塞)

news/2026/1/17 21:34:13/文章来源:https://www.cnblogs.com/dylan-bky/p/19497214

基于Spring Boot的CompletableFuture与Consumer批量处理方案

方案概述:

    批量请求处理:用户发送多条数据请求,并发处理每条数据线程池执行:使用自定义线程池处理具体业务逻辑
  1. 异步结果获取:通过CompletableFuture获取线程处理结果
  2. 结果回调:使用Consumer模式处理完成后的结果

核心实现分析:

1. 线程池配置

package org.completablefuture.consumer;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;@Configuration
public class AsyncConfig {@Bean("taskExecutor")public Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(20);executor.setQueueCapacity(100);executor.setThreadNamePrefix("BatchProcessing-");executor.setRejectedExecutionHandler(new java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;}
}
  • 配置专用线程池处理批量任务
  • 核心线程5个,最大线程10个,队列容量20

2.批量处理服务

List<CompletableFuture<ProcessResult>> futures = requests.stream().map(request -> {CompletableFuture<ProcessResult> future = new CompletableFuture<>();batchProcessingService.process(request, result -> {}, future);log.info("batch处理返回的future: {}", future);return future;}).collect(Collectors.toList());
/*** 单个处理请求,请求处理完成后立即回调** @param request* @param callback* @param completableFuture*/public void process(BatchRequest request,Consumer<ProcessResult> callback,CompletableFuture<ProcessResult> completableFuture) {log.info("进入process request: {}", request);CompletableFuture.supplyAsync(() -> businessService.dealBusiness(request), taskExecutor).whenComplete((result, throwable) -> {if (throwable != null) {ProcessResult errorResult = new ProcessResult(request.getId(),false,"处理失败: " + throwable.getMessage(),null,0,null);callback.accept(errorResult);completableFuture.completeExceptionally(throwable);} else {callback.accept(result);completableFuture.complete(result);}});}
  • 控制层循环处理请求
  • BatchProcessingService类中处理每一个请求,并从线程中获取处理结果,并回调返回

3.业务处理

 

 

public ProcessResult dealBusiness(BatchRequest request) {// 模拟处理逻辑String id = request.getId();Integer idInt = Integer.valueOf(id) == null ? 0 : Integer.valueOf(id);if (StringUtils.isNoneBlank(id) && idInt == 3){try {// 模拟随机异常if (new Random().nextBoolean()) {throw new RuntimeException("Simulated business exception");}} catch (IllegalArgumentException exception) {// 处理特定异常return new ProcessResult(request.getId(),false,"处理失败",null,-1,exception);}/*new ProcessResult(request.getId(),false,"处理失败",null,-1,new Exception("处理出现异常"));*/}if (StringUtils.isNoneBlank(id) && idInt % 2 == 0){return new ProcessResult(request.getId(),false,"处理失败",null,-1,null);} else {return new ProcessResult(request.getId(),true,"处理成功",request.getData(),-1,null);}}

 

4.对处理结果进行合并

return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenApply(v -> futures.stream().map(CompletableFuture::join).collect(Collectors.toList()));

 

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

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

相关文章

GESP认证C++编程真题解析 | 202506 四级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

豆包写的论文怎么过AIGC检测?实测这几款工具有效 - 还在做实验的师兄

豆包生成的论文AI率通常在70%-90%,直接提交肯定过不了。推荐用嘎嘎降AI(85%→8%,4.8元/千字)或比话降AI(可降至5%以下)处理。让豆包自己改没用。豆包写的论文怎么过AIGC检测?实测这几款工具有效TL;DR:豆包生成…

GESP认证C++编程真题解析 | 202506 三级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

Hitler the justice

I hate this world, only Heiliges Rmisches Reich gives me meaning. I love Deutschland and hate the bullies, because I can not find the common love.

DeepSeek写的论文怎么降AI率?3款工具实测对比 - 还在做实验的师兄

DeepSeek写的论文直接提交知网检测,AI率通常在38%-99%之间。单靠DeepSeek自己降AI效果有限(平均降35%),推荐用专业工具:嘎嘎降AI性价比高,比话降AI可将AI率降至0%。DeepSeek写的论文怎么降AI率?3款工具实测对比…

GESP认证C++编程真题解析 | 202506 一级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

2026年期刊论文降AI率工具推荐,顺利发表必备 - 还在做实验的师兄

期刊对AI率的要求通常比学校更严格,部分期刊要求低于10%甚至5%。推荐比话降AI(可降至0%,8元/千字)和嘎嘎降AI(达标率99.26%,4.8元/千字)。投稿前一定要处理好AI率。2026年期刊论文降AI率工具推荐,顺利发表必备…

详细介绍:任务悬赏小程序核心玩法 + 功能全解析:精准匹配与信任构建的变现逻辑

详细介绍:任务悬赏小程序核心玩法 + 功能全解析:精准匹配与信任构建的变现逻辑pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-…

毕业论文降AI率,学长推荐的5款工具(含免费额度) - 还在做实验的师兄

毕业论文AIGC检测不过别慌,这5款降AI工具都有免费额度可以先体验。重点推荐嘎嘎降AI(免费试用+达标率99.26%)和比话降AI(500字免费+知网专精)。先免费测效果,满意再付费。毕业论文降AI率,学长推荐的5款工具(含…

GESP认证C++编程真题解析 | 202506 二级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

基于SSM的服装销售系统-计算机毕业设计源码+无LW文档

基于SSM的服装销售系统论文 摘要&#xff1a;本文围绕基于SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;框架的服装销售系统展开研究。阐述了系统的研究背景与意义&#xff0c;深入分析系统需求&#xff0c;详细介绍功能设计。该系统旨在解决传统服装销售管理模式的问…

嘎嘎降AI vs 比话降AI:2026年降AI工具对比测评 - 还在做实验的师兄

嘎嘎降AI主打性价比(4.8元/千字,达标率99.26%),比话降AI主打知网专精(8元/千字,可降至0%)。追求省钱选嘎嘎,追求极致效果选比话。两款都很靠谱,按需选择即可。嘎嘎降AI vs 比话降AI:2026年降AI工具对比测评T…

大数据领域必备:ClickHouse 全方位解析

大数据领域必备&#xff1a;ClickHouse 全方位解析 一、引言 (Introduction) 钩子 (The Hook) “昨天凌晨3点&#xff0c;我被运维的电话叫醒——数据 dashboard 又崩了。” 这是我做大数据工程师时最难忘的经历。当时我们用Hive处理用户行为数据&#xff0c;每次业务方要查“过…

新能源汽车充电服务系统-计算机毕业设计源码+LW文档

一、 研究的背景、目的和意义 &#xff08;一&#xff09;课题研究的背景 随着新能源汽车市场的快速发展&#xff0c;充电服务成为关键环节。全球能源结构的转型是当前新能源汽车充电服务系统设计的重要背景之一。传统化石能源的消耗带来了严重的环境污染和温室气体排放&…

SCI论文降AI率工具推荐:Turnitin检测轻松过 - 还在做实验的师兄

SCI论文投稿前需要通过Turnitin AI检测,中文降AI工具对英文无效。推荐AIGCleaner(专业英文降AI,Turnitin检测83%→0%)。国内论文可用嘎嘎降AI配合。SCI论文降AI率工具推荐:Turnitin检测轻松过TL;DR:SCI论文投稿前…

JUC并发编程:LockSupport.park() 与 unpark() 深度解析

一、前言在Java并发编程中&#xff0c;AQS (AbstractQueuedSynchronizer) 是实现锁&#xff08;如 ReentrantLock&#xff09;、同步器&#xff08;如 CountDownLatch&#xff09;的核心基础。而 AQS 能够实现线程的阻塞与唤醒&#xff0c;其底层完全依赖于 LockSupport 工具类…

AIGC检测原理解析:为什么自己写的论文也会被判AI生成 - 还在做实验的师兄

AIGC检测系统识别的是「AI特征」而非「是否由AI生成」。规范的学术写作特征与AI特征高度重合,所以自己写的论文也可能被误判。解决方法是用嘎嘎降AI等专业工具处理,让文本「看起来更像人写的」。AIGC检测原理解析:为…

高校志愿服务管理系统-计算机毕业设计源码+无LW文档

摘要&#xff1a;本文旨在探讨高校志愿服务管理系统的开发与实施。通过分析当前高校志愿服务管理的现状和存在的问题&#xff0c;提出了开发一个综合性的志愿服务管理系统的需求。本文详细阐述了系统的需求分析、功能设计以及预期的社会和经济影响&#xff0c;旨在提高高校志愿…

论文AI率从90%降到5%,我用了这个方法 - 还在做实验的师兄

AI率90%是极高的情况,但专业工具可以处理。我用嘎嘎降AI把90%的AI率降到了5%以下,花了不到50块钱,全程20分钟。手动改根本不可能,直接用工具是唯一出路。论文AI率从90%降到5%,我用了这个方法TL;DR:AI率90%是极高…

2026年便宜好用的降AI工具推荐,学生党必看 - 还在做实验的师兄

学生党预算有限,推荐嘎嘎降AI(4.8元/千字,1000字免费试用)和率零(3.2元/千字,最便宜)。效果要求高选嘎嘎,纯省钱选率零。都有免费额度,先试再买。2026年便宜好用的降AI工具推荐,学生党必看TL;DR:学生党预算…