diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/config/ThreadPoolConfig.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/config/ThreadPoolConfig.java new file mode 100644 index 00000000..bd8804db --- /dev/null +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/config/ThreadPoolConfig.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; + } +} diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/commodity/controller/GroupCommodityCodeController.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/commodity/controller/GroupCommodityCodeController.java index 2e39f498..53c1c877 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/commodity/controller/GroupCommodityCodeController.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/commodity/controller/GroupCommodityCodeController.java @@ -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> completableFutureList = Lists.newArrayList(); + for (MdmGmfxxtbReqBO reqBO : reqBOList) { + CompletableFuture 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 reqBOList = Lists.newArrayList(); + reqBOList.add(reqBO); + return sdEnregyService.syncBuyerMessageService(reqBOList); + } + + + @RequestMapping("/uploadUserInfo") public R uploadUserInfo(@RequestParam(value = "file") MultipartFile file) { try {