视频讲解
1_基础环境介绍
2_商品微服务
3_订单微服务
4_配置中心
5_Nginx限流
代码
建立数据库相关表的代码:
代码语言:javascript复制# 创建数据库
CREATE DATABASE IF NOT EXISTS renda01 DEFAULT CHARACTER SET utf8;
# 选择使用数据库
USE renda01;
# 创建商品表
DROP TABLE IF EXISTS products;
CREATE TABLE products
(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50), # 商品名称
`price` DOUBLE,
`flag` VARCHAR(2), # 上架状态
`goods_desc` VARCHAR(100), # 商品描述
`images` VARCHAR(400), # 商品图片
`goods_stock` INT, # 商品库存
`goods_type` VARCHAR(20) # 商品类型
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
INSERT INTO products
VALUES (1, 'HUAWEI P40', 5999, '1', '华为P40 5G手机 分期 麒麟990 晨曦金 8 256GB', 'https://img14.360buyimg.com/n0/jfs/t1/133822/33/8832/135985/5f4da578E7c6efde1/2cd53a53083ab2ed.jpg', 99, '1');
INSERT INTO products
VALUES (2, 'XIAOMI', 6999, '1', '小米 P40 5G手机 分期 麒麟990 晨曦金 8 256GB', 'https://img14.360buyimg.com/n0/jfs/t1/133822/33/8832/135985/5f4da578E7c6efde1/2cd53a53083ab2ed.jpg', 99, '1');
INSERT INTO products
VALUES (3, 'APPLE', 7999, '1', '苹果 P40 5G手机 分期 麒麟990 晨曦金 8 256GB', 'https://img14.360buyimg.com/n0/jfs/t1/133822/33/8832/135985/5f4da578E7c6efde1/2cd53a53083ab2ed.jpg', 99, '2');
# 创建订单表
DROP TABLE IF EXISTS orders;
CREATE TABLE orders
(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`flag` VARCHAR(2), # 订单状态(未支付、已支付、已失效、已删除)
`create_time` DATETIME # 创建时间
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
INSERT INTO orders VALUES (1, '1', '2020-10-11 15:41:46');
INSERT INTO orders VALUES (2, '1', '2020-10-12 15:41:46');
INSERT INTO orders VALUES (3, '3', '2020-10-13 15:41:46');
INSERT INTO orders VALUES (4, '4', '2020-10-14 15:41:46');
# 创建订单商品中间表
DROP TABLE IF EXISTS orders_products_relation;
CREATE TABLE orders_products_relation
(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`order_id` INT, # 订单 id
`product_id` INT # 商品 id
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
INSERT INTO orders_products_relation VALUES (1, 1, 1);
INSERT INTO orders_products_relation VALUES (2, 1, 2);
INSERT INTO orders_products_relation VALUES (3, 2, 1);
INSERT INTO orders_products_relation VALUES (4, 2, 2);
INSERT INTO orders_products_relation VALUES (5, 2, 3);
INSERT INTO orders_products_relation VALUES (6, 3, 1);
INSERT INTO orders_products_relation VALUES (7, 4, 1);
INSERT INTO orders_products_relation VALUES (8, 4, 2);
说明
访问域名:www.springcloudgateway.com
需求
系统架构图
微服务搭建
lagou-parent
:父微服务,所有微服务继承
lagou-cloud-gateway
:网关微服务,集群环境,端口号分别为:9000、9001
lagou-service-order
:订单微服务,集群环境,端口号分别为:9100、9101
lagou-service-goods
:商品微服务,商品微服务,集群环境,端口号为别为:9200、9201
laoug-service-common
:公共组件微服务,放置所有业务微服务的 POJO 和 Feign 接口
lagou-cloud-eureka
:服务注册与发现微服务,集群环境,端口号分别为 9300、9301
lagou-cloud-config
:配置管理微服务,非集群环境,端口号 9400
技术规范
Boot 版本:2.1.6.RELEASE
数据访问:Mybatis-plus
编译插件:Lombok
访问风格:Restful
测试工具:Postman
商品微服务功能列表
通过 id 查询商品。
通过 id 删除商品。
通过 id 编辑商品。
分页查询:
pageSize = 10
- 查询条件:商品名称、分类、价格范围、库存范围、上架状态(0 下架,1 上架)
- 返回类型:Map,keys: List 商品集合、total 总条目数
商品表自行设计,保证核心字段存在。
订单微服务功能列表
根据 id 查询订单。
分页查询:
pageSize = 10
- 查询条件:订单创建时间范围、订单状态(1 未支付、2 已支付、3 已失效、4 已删除)
- 返回类型:Map,keys: List 订单集合、total 总条目数
根据订单 id 查询商品列表:
- 调用商品微服务
- Feign 接口调用,负载均衡
- 超时时间 5 秒触发熔断
- 熔断后服务降级,返回空商品列表
- 线程池隔离,并发线程数 16,最大队列 1000,队列拒绝阈值 6000
订单表自行设计,注意表的拆分,遵循三大范式。
Nginx
设置 Gateway 访问 Gateway 负载均衡。
Nginx 限流(选做):
- 令牌桶策略
- 每秒新增 100 个令牌
- 令牌桶一共有 500 个令牌
- 每个 IP 最多并发 10 个连接
- 限制并发连接数 200
Gateway
所有请求经过 Gateway 转发。
配置动态路由策略。
支付负载均衡。
CONFIG Bus
从配置获取公司宣传标语 slogan - 中国梦!
。
支持动态刷新。