OpenFeign编码暴露远程接口
在 newbee-mall-cloud-shop-cart-api
模块中新增需要暴露的接口 FeignClient
。如果其他微服务实例需要获取购物车微服务中的资源,则可以通过调用购物车微服务下暴露的接口来实现。
当前项目中使用购物车微服务的只有订单微服务,主要有两个功能,分别是根据购物项 id
链表查询购物项表和删除多条购物项记录。因此,笔者在 NewBeeMallShoppingCartController
类中新建了一个商品详情接口,并将其暴露,代码如下:
@GetMapping("/shop-cart/listByCartItemIds")
@ApiOperation(value = "购物车列表", notes = "")
public Result<List<NewBeeMallShoppingCartItem>> cartItemListByIds(@RequestParam("cartItemIds") List<Long> cartItemIds) {
if (CollectionUtils.isEmpty(cartItemIds)) {
return ResultGenerator.genFailResult("error param");
}
return ResultGenerator.genSuccessResult(newBeeMallShoppingCartService.getCartItemsByCartIds(cartItemIds));
}
@DeleteMapping("/shop-cart/deleteByCartItemIds")
@ApiOperation(value = "批量删除购物车项", notes = "")
public Result<Boolean> deleteByCartItemIds(@RequestParam("cartItemIds") List<Long> cartItemIds) {
if (CollectionUtils.isEmpty(cartItemIds)) {
return ResultGenerator.genFailResult("error param");
}
return ResultGenerator.genSuccessResult(newBeeMallShoppingCartService.deleteCartItemsByCartIds(cartItemIds) > 0);
}
在 newbee-mall-cloud-shop-cart-api
目录下新建 ltd.shopcart.cloud.newbee.openfeign
包,之后在该包下新增 NewBeeCloudShopCartServiceFeign
类,用于创建对购物车模块中相关接口的 Feign
调用。
NewBeeCloudShopCartServiceFeign
类的代码如下:
package ltd.shopcart.cloud.newbee.feign;
import ltd.common.cloud.newbee.dto.Result;
import ltd.shopcart.cloud.newbee.dto.NewBeeMallShoppingCartItemDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@FeignClient(value = "newbee-mall-cloud-shop-cart-service", path = "/shop-cart")
public interface NewBeeCloudShopCartServiceFeign {
@GetMapping(value = "/listByCartItemIds")
Result<List<NewBeeMallShoppingCartItemDTO>> listByCartItemIds(@RequestParam(value = "cartItemIds") List<Long> cartItemIds);
@DeleteMapping(value = "/deleteByCartItemIds")
Result<Boolean> deleteByCartItemIds(@RequestParam(value = "cartItemIds") List<Long> cartItemIds);
}
如果其他微服务需要与购物车微服务进行远程通信并获取相关数据,就可以引入 newbee-mall-cloud-shop-cart-api
模块作为依赖,并且直接调用 NewBeeCloudShopCartServiceFeign
类中的 listByCartItemIds()
方法和 deleteByCartItemIds()
方法完成对购物项数据的批量查询和删除。如果在后续的开发过程中,购物车微服务中有其他接口需要暴露以供其他微服务调用,就可以继续在 NewBeeCloudShopCartServiceFeign
类中编码。
本章主要讲解购物车模块在微服务架构下的编码改造,在购物车微服务开发完成后,本书实战项目已经完成了大部分功能模块的开发与测试,即将进入尾声。希望读者能够根据笔者提供的开发步骤顺利地完成本章的项目改造。