feature 1.增加多线程

release
zhenghaiyang@ele-cloud.com 2 years ago
parent 983b32ccf9
commit 32512af319
  1. 49
      order-management-consumer/src/main/java/com/dxhy/order/consumer/config/ThreadPoolConfig.java
  2. 29
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/commodity/controller/GroupCommodityCodeController.java

@ -0,0 +1,49 @@
package com.dxhy.order.consumer.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Created by IntelliJ IDEA.
*
* @author: zhenghaiyang
* Date: 2023-02-06
* Description:
*/
@Configuration
public class ThreadPoolConfig {
//参数初始化
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
//核心线程数量大小
private static final int corePoolSize = Math.max(2, Math.min(CPU_COUNT - 1, 4));
//线程池最大容纳线程数
private static final int maxPoolSize = CPU_COUNT * 2 + 1;
//阻塞队列
private static final int workQueue = 20;
//线程空闲后的存活时长
private static final int keepAliveTime = 30;
@Bean("asyncExecutor")
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
//核心线程数
threadPoolTaskExecutor.setCorePoolSize(corePoolSize);
//最大线程数
threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize);
//等待队列
threadPoolTaskExecutor.setQueueCapacity(workQueue);
//线程前缀
threadPoolTaskExecutor.setThreadNamePrefix("async-");
//线程池维护线程所允许的空闲时间,单位为秒
threadPoolTaskExecutor.setKeepAliveSeconds(keepAliveTime);
// 线程池对拒绝任务(无线程可用)的处理策略
threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}

@ -22,6 +22,7 @@ import com.dxhy.order.model.R;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -30,6 +31,8 @@ import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
@ -105,6 +108,10 @@ public class GroupCommodityCodeController {
}
@Autowired
@Qualifier("asyncExecutor")
private Executor voucherTaskExecutor;
@RequestMapping("/uploadBuyerInfo")
public R uploadBuyerInfo(@RequestParam(value = "file") MultipartFile file) {
try {
@ -152,13 +159,31 @@ public class GroupCommodityCodeController {
reqBO.setUUID(baseService.getGenerateShotKey());
reqBOList.add(reqBO);
}
String str = sdEnregyService.syncBuyerMessageService(reqBOList);
return R.ok().put("data",str);
int index = 0;
List<CompletableFuture<String>> completableFutureList = Lists.newArrayList();
for (MdmGmfxxtbReqBO reqBO : reqBOList) {
CompletableFuture<String> voidCompletableFuture = CompletableFuture.supplyAsync(()->{
String str = buyerMessageService(reqBO);
return str;
}, voucherTaskExecutor);
completableFutureList.add(voidCompletableFuture);
}
CompletableFuture.allOf(completableFutureList.toArray(new CompletableFuture[0])).join();
return R.ok().put("data","");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public String buyerMessageService(MdmGmfxxtbReqBO reqBO){
List<MdmGmfxxtbReqBO> reqBOList = Lists.newArrayList();
reqBOList.add(reqBO);
return sdEnregyService.syncBuyerMessageService(reqBOList);
}
@RequestMapping("/uploadUserInfo")
public R uploadUserInfo(@RequestParam(value = "file") MultipartFile file) {
try {

Loading…
Cancel
Save