当前位置: 首页 > 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公司订单、库存、积分的案例开发,以下是服务调用关系

相关文章:

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

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

澳大利亚教育部宣布ChatGPT将被允许在澳学校使用!

教育部长最近宣布,从 2024 年起,包括 ChatGPT 在内的人工智能将被允许在所有澳大利亚学校使用。 (图片来源:卫报) 而早些时候,澳洲各高校就已经在寻找与Chatgpt之间的平衡了。 之前,悉尼大学就…...

Linux基础指令笔记大全

Linux基础指令笔记大全 1. ls 指令2. pwd命令3. cd 指令4. touch指令5. mkdir指令6. rmdir指令 && rm 指令7. man指令8.cp指令9. mv指令10. cat 指令11. more指令12. less指令13. head指令14. tail指令15. 时间相关的指令1. **在显示方面,使用者可以设定欲显…...

vue学习-14vue的路由缓存组件以及activated和deactivated生命周期钩子

在Vue.js中&#xff0c;使用路由的内置特性来控制组件的缓存&#xff0c;以提高应用程序性能。默认情况下&#xff0c;Vue Router不会缓存组件&#xff0c;但你可以通过以下方式启用组件缓存&#xff1a; <keep-alive> 组件&#xff1a;<keep-alive> 是Vue.js的内…...

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.5.0opencv_contrib CMake编译VS2019编译可…...

31 数据分析(中)numpy介绍

文章目录 工具excelTableauPower Queryjupytermatplotlibnumpy安装导入包快速掌握&#xff08;bushi&#xff09;array和list的相互转化 np的range多维数组的属性array的改变形状array升降维度array内元素的类型数和array的运算array之间的加减法认识轴切片条件与逻辑修改值app…...

华为OD机考算法题:字符串划分

题目部分 题目字符串划分难度难题目说明给定一个小写字母组成的字符串s&#xff0c;请找出字符串中两个不同位置的字符作为分割点&#xff0c;使得字符串分成的三个连续子串且子串权重相等&#xff0c;注意子串不包含分割点。 若能找到满足条件的两个分割点&#xff0c;请输出…...

AF_UNIX和127.0.0.1(AF_INET)回环地址写数据速度对比(二)

之前写了篇博客&#xff1a;AF_UNIX和127.0.0.1(AF_INET)回环地址写数据速度对比 然后利用的是发送端读取大文件&#xff0c;接收方接收并保存为文件的方式进行测试&#xff0c;结果发现&#xff0c;AF_UNIX并未比127.0.0.1(AF_INET)回环地址优秀&#xff0c;若单次发送的字节数…...

“Python+”集成技术高光谱遥感数据处理与机器学习教程

详情点击公众号链接&#xff1a;“Python”集成技术高光谱遥感数据处理与机器学习教程 第一&#xff1a;高光谱基础 一&#xff1a;高光谱遥感基本概念 01)高光谱遥感 02)光的波长 03)光谱分辨率 04)高光谱遥感的历史和发展 二&#xff1a;高光谱传感器与数据获取 01)高…...

centos7 快速搭建自测mysql环境 docker + mysql

环境准备 centos7快速搭建docker mysql docker镜像源配置 一般都是要配的不然太慢了&#xff0c;docker 1.12以上创建或修改 /etc/docker/daemon.json 文件&#xff0c;修改为如下形式: 地址替换国内源 {"registry-mirrors" : ["https://docker.mirrors.u…...

c++视觉检测-----Canny边缘算子

Canny边缘算子 cv::Canny()是OpenCV库中用于执行Canny边缘检测的函数。Canny边缘检测是一种广泛使用的图像处理技术&#xff0c;用于检测图像中的边缘。 以下是cv::Canny()函数的一般用法和参数&#xff1a; void cv::Canny(cv::InputArray image, // 输入图像&#x…...

机器学习笔记 - 用于动作识别的网络TSN/TSM/SlowFast/R(2+1)D/3D MobileNetV2

一、简述 动作识别是在视频序列中检测和分类人类动作的过程。 近年来,由于其广泛的应用,它已成为一项越来越重要的技术,例如监控、人机交互以及视频索引和检索。 特别是,动作识别对于无人驾驶飞行器 (UAV) 或无人机来说变得至关重要,因为它们越来越多地用于各种应用,例如…...

mybatis批量插入

一、定义DBExec import java.util.List;public abstract class DBExec<T> {public abstract void operate(List<T> list); }二、定义BatchDBService public interface BatchDBService<T> {void exec(int batchSize, List<T> list, DBExec<T> d…...

软件‘小程序‘前台开发软件定制的知识|app网站搭建

软件&#xff0c;小程序&#xff0c;前台开发软件定制的知识 随着互联网的快速发展&#xff0c;软件&#xff0c;小程序&#xff0c;前台开发软件定制已经成为了企业必备的工具。它可以帮助企业更好地管理业务&#xff0c;提高效率&#xff0c;增强用户体验。那么&#xff0c;什…...

HTML-注册页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> </head> <body><from action"#" method"get"><table border"1" align&q…...

17.(开发工具篇Gitlab)如何在Gitlab配置ssh key

前言: Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置 一、git 配置 (1)打开 git 命令窗口 (2)配置用户名(填自己的姓名) git config --global user.name “chenbc” (3)配置用户邮箱(填自己的邮箱) git config …...

ArcGIS/GeoScene脚本:基于粒子群优化的支持向量机分类模型

参数输入 输出 栅格 预测为负类的概率 预测为正类的概率 二值化结果 评估结果 ROC曲线...

Python+Tkinter 图形化界面基础篇:添加图形和图像

PythonTkinter 图形化界面基础篇&#xff1a;添加图形和图像 引言添加图形元素步骤1&#xff1a;导入 Tkinter 步骤2&#xff1a;创建主窗口步骤3&#xff1a;创建 Canvas 步骤4&#xff1a;绘制图形 绘制线条 绘制矩形 绘制椭圆 绘制多边形 步骤5&#xff1a;启动主事件循环 显…...

前端js八股文大全

一、js的数据类型 值类型(基本类型)&#xff1a;数字(Number)、字符串&#xff08;String&#xff09;、布尔(Boolean)、对空&#xff08;Null&#xff09;、未定义&#xff08;Undefined&#xff09;、Symbol,大数值类型(BigInt) 引用数据类型&#xff1a;对象(Object)、数组…...

[环境]Ubuntu20.04安装Ceres

安装这么顺利我有点不适应&#xff0c;记录一下 注意安装的位置与层级关系 参考链接 知乎方案...

tao-8k部署避坑指南:Xinference日志排查、WebUI访问与调用验证

tao-8k部署避坑指南&#xff1a;Xinference日志排查、WebUI访问与调用验证 1. 环境准备与快速部署 在开始部署tao-8k模型之前&#xff0c;我们先来了解一下这个模型的基本情况。tao-8k是由Hugging Face开发者amu研发并开源的专业文本嵌入模型&#xff0c;它能够将文本转换为高…...

Pixel Script Temple 数学建模辅助:将MATLAB算法思路转换为Python代码

Pixel Script Temple 数学建模辅助&#xff1a;将MATLAB算法思路转换为Python代码 1. 为什么需要MATLAB到Python的代码转换 在科研和工程领域&#xff0c;MATLAB长期以来一直是数学建模和科学计算的首选工具。但随着Python生态系统的成熟&#xff0c;越来越多的团队开始转向使…...

PXE装机避坑大全:从TFTP根目录设置到Kickstart无人值守的13个常见错误修复

PXE装机避坑大全&#xff1a;从TFTP根目录设置到Kickstart无人值守的13个常见错误修复 在企业级IT运维中&#xff0c;PXE&#xff08;预启动执行环境&#xff09;网络装机技术因其高效、自动化的特点&#xff0c;已成为服务器批量部署的标配方案。但看似简单的PXE部署流程背后&…...

intv_ai_mk11应用场景:技术团队内部知识沉淀助手、新人入职培训问答机器人

intv_ai_mk11应用场景&#xff1a;技术团队内部知识沉淀助手、新人入职培训问答机器人 1. 什么是intv_ai_mk11对话机器人 intv_ai_mk11是一款基于7B参数Llama架构的AI对话助手&#xff0c;专门为技术团队和新人培训场景设计。它运行在GPU服务器上&#xff0c;能够理解并回答各…...

7步掌握MetaGPT:从单行需求到完整软件的多智能体革命

7步掌握MetaGPT&#xff1a;从单行需求到完整软件的多智能体革命 【免费下载链接】MetaGPT &#x1f31f; The Multi-Agent Framework: First AI Software Company, Towards Natural Language Programming 项目地址: https://gitcode.com/GitHub_Trending/me/MetaGPT 想…...

知乎上线求职工具,助力毕业生破困局

知乎上线求职利器&#xff0c;直击毕业生痛点2026届全国普通高校毕业生预计达1270万人&#xff0c;再创历史新高。与此同时&#xff0c;AI技术加速行业重构&#xff0c;部分传统岗位需求收缩&#xff0c;大量毕业生陷入“海投”困境&#xff0c;难以精准定位自身。在此背景下&a…...

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权

中兴光猫配置解密工具&#xff1a;突破运营商限制&#xff0c;掌握家庭网络自主权 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 在家庭网络管理中&#xff0c;你是否曾因…...

RB3201-RBProtocol:ESP32机器人轻量通信协议栈解析

1. RB3201-RBProtocol 库深度解析&#xff1a;面向机器人控制的轻量级嵌入式通信协议栈 1.1 协议背景与工程定位 RB3201-RBProtocol 是由 RoboticsBrno 团队开发的嵌入式通信协议库&#xff0c;专为 ESP32 平台设计&#xff0c;核心目标是实现与 Android 端 RbController 移动…...

【以太网帧格式】

以太网帧格式一、顺序二、分析一、顺序 前导码 | 帧开始定界符 | 目的MAC | 源MAC | 类型&#xff08;长度&#xff09; | 数据字段 | 帧校验序列FCS3 &#xff08;以太网帧最小帧长&#xff1a;64 字节&#xff0c;最大帧长&#xff1a;1518 字节。&#xff09; 二、分析 1…...

解决企业级流程建模挑战:基于Vue与bpmn.js的Flowable工作流设计器深度集成指南

解决企业级流程建模挑战&#xff1a;基于Vue与bpmn.js的Flowable工作流设计器深度集成指南 【免费下载链接】workflow-bpmn-modeler &#x1f525; flowable workflow designer based on vue and bpmn.io7.0 项目地址: https://gitcode.com/gh_mirrors/wo/workflow-bpmn-mode…...