1.库存服务(ware)做好支持查询业务微服务调用实例:
两个服务,一个商品服务(Product) 一个库存服务(Ware)
场景:商品服务查询库存服务使用有库存。
@PostMapping("/hasstock")
public R getSkusHasStock(@RequestBody List skuIds){
//sku_id stock
List vos = wareSkuService.getSkusHasStock(skuIds);
return R.ok().put("data",vos);
}
2.商品服务pom导入openfeign
3.建立专属feign远程业务的包(文件夹)org.springframework.cloud spring-cloud-starter-openfeign
位置:个人习惯 这里与controller目录平级 config controller dao entity exception roductApplication service vo 增加一个 --> feign 包4.写远程调用接口
1.建立类文件 WareFeignService
2.接口注解FeignClient客户端 调用远程服务的服务名
@FeignClient("ware")
public interface WareFeignService {
}
3.在feign类方法编写远程接口方法。 直接去被调用方法复制签名
@PostMapping("/hasstock")
R getSkusHasStock(@RequestBody List skuIds)
4.把这个方法,补齐被调用方法的访问路径
@PostMapping("/ware服务路径/远程getSkusHasStock所在控制器路径/hasstock")
R getSkusHasStock(@RequestBody List skuIds)
5.在product的需要远程调用库存的地方 引入这个远程调用接口 当作service试用
@Autowired WareFeignService wareFeignService; ... 如: skusHasStock = wareFeignService.getSkusHasStock(skuIdList);
至此,调用完成。
小笔记本解释一段stream()代码:
解释1: ListlistSku Map map =listSku.stream().collect(Collectors.toMap(SkuHasStockTo::getSkuId, item -> item.getHasStock())); //遍历listSku 把它的每一个对象(SkuHasStockTo)的 getSkuId 作为键 SkuHasStockTo的每一个hasStock属性作为值,做成map键值对 解释2: List skus List skuIdList = skus.stream().map(SkuInfoEntity::getSkuId).collect(Collectors.toList()); //遍历 skus的每一个对象(SkuInfoEntity) 取出它的skuId 生成一个新的skuId的List 解释3: List baseAttrs List attrIds = baseAttrs.stream().map(attr -> { return attr.getAttrId(); }).collect(Collectors.toList()); //遍历 baseAttrs的每一个对象(ProductAttrValueEntity) AttrId 生成一个新的skuId的List 解释4: public static class Attrs{ private Long attrId; private String attrName; private String attrValue; } Set idSet List baseAttrs List attrList = baseAttrs.stream().filter(item -> { return idSet.contains(item.getAttrId()); }).map(item -> { Attrs attrs1 = new SkuEsModel.Attrs(); BeanUtils.copyProperties(item, attrs1); return attrs1; }).collect(Collectors.toList()); //遍历 baseAttrs的每一个对象(ProductAttrValueEntity) //filter 过滤筛选出集合idSet 包含 ProductAttrValueEntity属性值attrId的 //把过滤后的ProductAttrValueEntity 按照 Attrs的属性 生成 List



