当前位置: 首页 > news >正文

SpringCloud小项目——订单积分商城 使用Nacos、Open Feign、Gateway、Sentinel技术栈

在这里插入图片描述

目录

  • 引出
  • 小项目要求
  • 创建极简数据库表
    • 订单表,订单明细表
    • 商品表
    • 积分表
  • 相关微服务
    • 积分微服务
    • 产品微服务
    • 订单微服务
      • 调用积分和订单微服务
    • 网关微服务
      • 登陆认证通过网关
      • 实现对外提供接口API走网关功能
  • sentinel相关
    • 使用Sentinel限流,流量整形
    • Sentinel降级服务(制造异常情况实现降级)
  • 总结

引出

使用Nacos、Open Feign、Gateway、Sentinel技术栈实现XX公司订单、库存、积分的案例开发,以下是服务调用关系

git代码:https://gitee.com/pet365/spring-cloud-goods

在这里插入图片描述

https://github.com/RainbowForest/e-commerce-microservices

在这里插入图片描述

https://awesomeopensource.com/project/RainbowForest/e-commerce-microservices

在这里插入图片描述

小项目要求

使用Nacos、Open Feign、Gateway、Sentinel技术栈实现XX公司订单、库存、积分的案例开发,以下是服务调用关系

技术栈:Nacos、Open Feign、Gateway、Sentinel技术栈

在这里插入图片描述

(二)数据库设计:

(1)订单表、订单明细表
(2)商品表
(3)积分表

(三)项目需求

(1)现订单增删改查除功能
(2)实现商品增删改查除功能
(3)实现积分增删改查除功能
(4)实现nacos配置中心
(5)实现网关用户认证功能

  • 在网关,使用token,实现认证功能

(6)实现对外提供接口API走网关功能

  • ①积分查询列表
  • ②商品查询列表
  • ③订单查询列表
  • ④下单功能

(7)实现内部服务调用功能

  • ①内部服务使用Open Feign
  • ②下单调用商品服务减库存
  • ③下单调用积分服务加积分

(8)Sentinel降级服务(制造异常情况实现降级)

(9)实现网关限流功能

  • 使用Sentinel限流,流量整形

创建极简数据库表

订单表,订单明细表

在这里插入图片描述

/*Navicat Premium Data TransferSource Server         : 127.0.0.1Source Server Type    : MySQLSource Server Version : 80022Source Host           : 127.0.0.1:3306Source Schema         : consumer_goods_orderTarget Server Type    : MySQLTarget Server Version : 80022File Encoding         : 65001Date: 10/10/2023 21:51:03
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for goods_order
-- ----------------------------
DROP TABLE IF EXISTS `goods_order`;
CREATE TABLE `goods_order`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键,暂不考虑高并发问题',`user_id` int NULL DEFAULT NULL COMMENT '用户id',`price` decimal(10, 2) NULL DEFAULT NULL COMMENT '总价格',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for goods_order_detail
-- ----------------------------
DROP TABLE IF EXISTS `goods_order_detail`;
CREATE TABLE `goods_order_detail`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '订单明细表主键',`order_id` int NULL DEFAULT NULL COMMENT '订单表的id',`goods_id` int NULL DEFAULT NULL COMMENT '商品的id',`nums` int NULL DEFAULT NULL COMMENT '数量',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

商品表

在这里插入图片描述

/*Navicat Premium Data TransferSource Server         : 127.0.0.1Source Server Type    : MySQLSource Server Version : 80022Source Host           : 127.0.0.1:3306Source Schema         : consumer_goods_productTarget Server Type    : MySQLTarget Server Version : 80022File Encoding         : 65001Date: 10/10/2023 21:52:45
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for goods_sku
-- ----------------------------
DROP TABLE IF EXISTS `goods_sku`;
CREATE TABLE `goods_sku`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名',`price` decimal(10, 2) NULL DEFAULT NULL COMMENT '价格',`stock` int NULL DEFAULT NULL COMMENT '数量',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of goods_sku
-- ----------------------------
INSERT INTO `goods_sku` VALUES (1, 'iPhone 15 Pro Max 超视网膜 XDR 显示屏', 8999.00, 39);SET FOREIGN_KEY_CHECKS = 1;

积分表

在这里插入图片描述

/*Navicat Premium Data TransferSource Server         : 127.0.0.1Source Server Type    : MySQLSource Server Version : 80022Source Host           : 127.0.0.1:3306Source Schema         : consumer_goods_pointsTarget Server Type    : MySQLTarget Server Version : 80022File Encoding         : 65001Date: 10/10/2023 21:53:48
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for goods_point
-- ----------------------------
DROP TABLE IF EXISTS `goods_point`;
CREATE TABLE `goods_point`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`user_id` int NULL DEFAULT NULL COMMENT '对应用户的主键',`point` decimal(10, 2) NULL DEFAULT NULL COMMENT '积分数量',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of goods_point
-- ----------------------------
INSERT INTO `goods_point` VALUES (1, 1, 10.89);
INSERT INTO `goods_point` VALUES (2, 1, 8999.00);
INSERT INTO `goods_point` VALUES (3, 1, 8999.00);
INSERT INTO `goods_point` VALUES (4, 1, 8999.00);
INSERT INTO `goods_point` VALUES (5, 1, 17998.00);
INSERT INTO `goods_point` VALUES (6, 1, 17998.00);
INSERT INTO `goods_point` VALUES (7, 1, 8999.00);
INSERT INTO `goods_point` VALUES (8, 1, 8999.00);SET FOREIGN_KEY_CHECKS = 1;

相关微服务

积分微服务

在这里插入图片描述

产品微服务

在这里插入图片描述

订单微服务

在这里插入图片描述

调用积分和订单微服务

内部服务使用Open Feign
下单调用商品服务减库存
下单调用积分服务加积分

在这里插入图片描述

网关微服务

在这里插入图片描述

登陆认证通过网关

下面是我用的token

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiJ9.Gdsp9Fz9DTbekM7maxJVceuWZeEZlF0Ir0NuzHbE7kc

在这里插入图片描述

权限从redis中获取

在这里插入图片描述

实现对外提供接口API走网关功能

①积分查询列表
②商品查询列表
③订单查询列表
④下单功能

在这里插入图片描述

sentinel相关

使用Sentinel限流,流量整形

进行配置

在这里插入图片描述

JMeter测试工具

在这里插入图片描述

http请求

在这里插入图片描述

线程数设置

在这里插入图片描述

sentinel中查看监控波形图

在这里插入图片描述

JMeter后台结果树

在这里插入图片描述

消峰填谷

在这里插入图片描述

采用均匀排除的策略

在这里插入图片描述

Sentinel降级服务(制造异常情况实现降级)

在积分微服务中,通过传的参数进行是否抛出异常

在这里插入图片描述

在调用积分微服务的订单order微服务中,设置feign的fallback

在这里插入图片描述

对于order调用的积分的请求资源进行熔断规则的设置

在这里插入图片描述

总体概览,多次调用触发了熔断降级,发送正常请求,次数处于熔断期间,因此也被降级。

在这里插入图片描述


总结

使用Nacos、Open Feign、Gateway、Sentinel技术栈实现XX公司订单、库存、积分的案例开发,以下是服务调用关系

http://www.lryc.cn/news/188371.html

相关文章:

  • 澳大利亚教育部宣布ChatGPT将被允许在澳学校使用!
  • Linux基础指令笔记大全
  • vue学习-14vue的路由缓存组件以及activated和deactivated生命周期钩子
  • 【opencv】windows10下opencv4.8.0-cuda版本源码编译教程
  • 31 数据分析(中)numpy介绍
  • 华为OD机考算法题:字符串划分
  • AF_UNIX和127.0.0.1(AF_INET)回环地址写数据速度对比(二)
  • “Python+”集成技术高光谱遥感数据处理与机器学习教程
  • centos7 快速搭建自测mysql环境 docker + mysql
  • c++视觉检测-----Canny边缘算子
  • 机器学习笔记 - 用于动作识别的网络TSN/TSM/SlowFast/R(2+1)D/3D MobileNetV2
  • mybatis批量插入
  • 软件‘小程序‘前台开发软件定制的知识|app网站搭建
  • HTML-注册页面
  • 17.(开发工具篇Gitlab)如何在Gitlab配置ssh key
  • ArcGIS/GeoScene脚本:基于粒子群优化的支持向量机分类模型
  • Python+Tkinter 图形化界面基础篇:添加图形和图像
  • 前端js八股文大全
  • [环境]Ubuntu20.04安装Ceres
  • ruoyi 若依 前端vue npm install 运行vue前端
  • 各大搜索引擎的User-Agent
  • codesys【按钮】
  • SSH在桌面会话启动应用程序
  • React的类式组件和函数式组件之间有什么区别?
  • codesys【读写轴参数】
  • Java架构师系统架构设计确定系统边界
  • pytorch实现经典神经网络:VGG16模型之初探
  • Newtonsoft.Json use
  • MySQL-3(9000字详解)
  • SLAM从入门到精通(3d 点云数据访问)