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

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

基于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.jsqmd.com/news/259451/

相关文章:

  • 豆包写的论文怎么过AIGC检测?实测这几款工具有效 - 还在做实验的师兄
  • GESP认证C++编程真题解析 | 202506 四级
  • GESP认证C++编程真题解析 | 202506 三级
  • 51单片机入门(一)
  • Hitler the justice
  • DeepSeek写的论文怎么降AI率?3款工具实测对比 - 还在做实验的师兄
  • GESP认证C++编程真题解析 | 202506 一级
  • 2026年期刊论文降AI率工具推荐,顺利发表必备 - 还在做实验的师兄
  • 详细介绍:任务悬赏小程序核心玩法 + 功能全解析:精准匹配与信任构建的变现逻辑
  • 毕业论文降AI率,学长推荐的5款工具(含免费额度) - 还在做实验的师兄
  • GESP认证C++编程真题解析 | 202506 二级
  • 基于SSM的服装销售系统-计算机毕业设计源码+无LW文档
  • 嘎嘎降AI vs 比话降AI:2026年降AI工具对比测评 - 还在做实验的师兄
  • 大数据领域必备:ClickHouse 全方位解析
  • 新能源汽车充电服务系统-计算机毕业设计源码+LW文档
  • SCI论文降AI率工具推荐:Turnitin检测轻松过 - 还在做实验的师兄
  • JUC并发编程:LockSupport.park() 与 unpark() 深度解析
  • AIGC检测原理解析:为什么自己写的论文也会被判AI生成 - 还在做实验的师兄
  • 高校志愿服务管理系统-计算机毕业设计源码+无LW文档
  • 论文AI率从90%降到5%,我用了这个方法 - 还在做实验的师兄
  • 2026年便宜好用的降AI工具推荐,学生党必看 - 还在做实验的师兄
  • 2026年降AI工具年度盘点:哪款最值得用 - 还在做实验的师兄
  • 完整教程:Fresha 的实时分析进化:从 Postgres 和 Snowflake 走向 StarRocks
  • 论文AI率从100%降到10%以下,我用的这几款工具 - 还在做实验的师兄
  • 强烈安利8个一键生成论文工具,专科生毕业论文轻松搞定!
  • 知网AIGC检测率太高?这5款降AI工具亲测有效 - 还在做实验的师兄
  • 研究生论文降AI率,导师推荐的3款工具 - 还在做实验的师兄
  • 深度测评继续教育AI论文写作软件TOP8:开题报告文献综述全攻略
  • 09函数
  • 13.3 大规模仿真与数据驱动技能学习:以NVIDIA Isaac Gym为平台的高通量训练范式