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 类中编码。

本章主要讲解购物车模块在微服务架构下的编码改造,在购物车微服务开发完成后,本书实战项目已经完成了大部分功能模块的开发与测试,即将进入尾声。希望读者能够根据笔者提供的开发步骤顺利地完成本章的项目改造。