@Override
public Map getSkuDetail(Long skuId) {
ConcurrentHashMap<String, Object> result = new ConcurrentHashMap<>();
//自动义线程池
ThreadPoolExecutor threadPoolExecutor = threadPoolConfig.threadPoolExecutor();
/**
* 异步编排,在查询出skuInfo 后面5步查询异步完成
* runAsync方法没有返回值
* supplyAsync方法有返回值
*
* thenAcceptAsync方法没有返回值
* thenApplyAsync方法有返回值
*
* allOf()所有方法执行完返回
* join() 会返回结果
*/
CompletableFuture<SkuInfo> future1 = CompletableFuture.supplyAsync(() -> {
//获取sku详细信息
SkuInfo skuInfo = productFeignClient.getSkuInfo(skuId);
if (skuInfo == null || skuInfo.getId() == null) {
return null;
}
//结果返回
result.put("skuInfo", skuInfo);
return skuInfo;
}, threadPoolExecutor);
CompletableFuture<Void> future2 = future1.thenAcceptAsync((skuInfo) -> {
if (skuInfo == null || skuInfo.getId() == null) {
return;
}
//分类信息
BaseCategoryView categoryView = productFeignClient
.getCategoryView(skuInfo.getCategory3Id());
//结果值返回
result.put("categoryView", categoryView);
}, threadPoolExecutor);
CompletableFuture<Void> future3 = future1.thenAcceptAsync((skuInfo) -> {
if (skuInfo == null || skuInfo.getId() == null) {
return;
}
//价格
BigDecimal skuPrice = productFeignClient.getSkuPrice(skuId);
//结果值返回
result.put("skuPrice", skuPrice);
}, threadPoolExecutor);
CompletableFuture<Void> future4 = future1.thenAcceptAsync((skuInfo) -> {
if (skuInfo == null || skuInfo.getId() == null) {
return;
}
//图片
List<SkuImage> skuImage = productFeignClient.getSkuImage(skuId);
//结果值返回
result.put("skuImage", skuImage);
}, threadPoolExecutor);
CompletableFuture<Void> future5 = future1.thenAcceptAsync((skuInfo) -> {
if (skuInfo == null || skuInfo.getId() == null) {
return;
}
//获取所有销售属性值与sku的键值对
List<Map> skuValueIdsMap = productFeignClient.getSkuValueIdsMap(skuInfo.getSpuId());
//结果值返回
result.put("skuValueIdsMap", skuValueIdsMap);
}, threadPoolExecutor);
CompletableFuture<Void> future6 = future1.thenAcceptAsync((skuInfo) -> {
if (skuInfo == null || skuInfo.getId() == null) {
return;
}
//获取指定spu与sku的商品的销售属性值信息
List<SpuSaleAttr> spuSaleAttrListCheckBySku = productFeignClient
.getSpuSaleAttrListCheckBySku(skuId, skuInfo.getSpuId());
//结果值返回
result.put("spuSaleAttrListCheckBySku", spuSaleAttrListCheckBySku);
}, threadPoolExecutor);
CompletableFuture.allOf(future1, future2, future3, future4, future5, future6).join();
return result;
}
记一次异步编排使用
最新推荐文章于 2024-07-05 14:51:01 发布