文章目录
- 一,业务逻辑分析
- 二,模拟调用和效果
- 1,Postman模拟调用
- 2,页面效果
- 三,代码总结
- 1 分页插件配置
- 2 服务间接口调用的不同方式
- 直接访问服务
- 通过网关访问服务
- 小小结
一,业务逻辑分析
采购负责人在完成采购任务后,会在采购管理系统中确认完成,特别说明,谷粒商城中不包含采购管理系统,我们需要用Postman模拟请求。
完成采购有2种可能情况:
- 所有采购需求都完成的情况下,采购单的状态为
已完成
,采购需求的状态为已完成
- 部分采购需求完成,采购单的状态为
有异常
,成功的采购需求状态为已完成
,不成功的采购需求状态为采购失败
完成采购的后台业务逻辑:
- 更新采购需求状态,可能是
完成
,可能是采购失败
- 完成采购需求需要更新库存
- 根据所有采购需求的状态更新采购单状态,可能是
完成
,可能是有异常
二,模拟调用和效果
1,Postman模拟调用
localhost:88/api/ware/purchase/done
{"id":1,"items":[{"itemId":1,"status":3,"reason":""},{"itemId":2,"status":4,"reason":"无货"}]
}
2,页面效果
采购单页面:
采购需求页面:
库存页面:
三,代码总结
1 分页插件配置
增加MybatisPlus分页配置,以便前端的分页功能能正常使用。
2 服务间接口调用的不同方式
在微服务架构中,Feign 是一个声明式的 HTTP 客户端,它简化了 HTTP 请求的发送。当使用 Feign 进行服务间通信时,有两种常见的配置方式:一种是直接与目标服务通信(绕过网关),另一种是通过 API 网关进行通信。
直接访问服务
配置步骤:
-
定义 Feign Client:
@FeignClient(name = "gulimall-product") public interface SkuInfoFeignService {@GetMapping("/skuinfo/info/{skuId}")SkuInfoEntity getSkuInfo(@PathVariable("skuId") Long skuId); }
-
服务发现:
- 确保
gulimall-product
服务已经在 Eureka 注册中心注册。 - 在 Feign 客户端所在的服务中配置 Eureka 和 Ribbon 以支持服务发现和服务实例选择。
- 确保
-
负载均衡:
- Ribbon 自动为 Feign 提供客户端负载均衡能力,无需额外配置。
优劣分析:
-
优点:
- 性能更高: 减少了网关转发的延迟。
- 简单直接: 服务间的调用更加直接,减少了中间环节。
-
缺点:
- 服务地址变更困难: 如果服务地址发生变化,需要修改 Feign 客户端的配置。
- 安全性较低: 缺少统一的安全认证机制。
- 管理不便: 每个服务都需要单独维护路由信息。
通过网关访问服务
配置步骤:
-
定义 Feign Client:
@FeignClient(name = "gulimall-gateway") public interface SkuInfoFeignService {@GetMapping("/api/product/skuinfo/info/{skuId}")SkuInfoEntity getSkuInfo(@PathVariable("skuId") Long skuId); }
-
网关配置:
- 配置网关路由规则将请求转发到相应的服务。
- 需要在网关服务中添加
/api/product/skuinfo/info/{skuId}
路由规则,指向gulimall-product
服务。
-
服务发现:
- 确保
gulimall-gateway
和gulimall-product
都已在 Eureka 注册中心注册。 - 在 Feign 客户端所在的服务中配置 Eureka 和 Ribbon 以支持服务发现和服务实例选择。
- 确保
优劣分析:
-
优点:
- 统一入口: 所有外部请求都通过网关进入,便于统一管理。
- 增强安全性: 可以在网关层实现认证授权等安全措施。
- 易于扩展: 网关可以提供缓存、监控等功能,方便扩展。
-
缺点:
- 性能影响: 增加了网关转发的延迟。
- 复杂度增加: 需要维护网关路由规则,增加了系统的复杂度。
小小结
选择哪种方式取决于您的具体需求和场景。如果追求高性能和简单性,可以选择直接访问服务;如果希望有更好的可管理性和安全性,则应考虑通过网关访问服务。