SpringCloud 环境&工程搭建
文章目录
1. SpringCloud介绍
SpringCloud 提供了一些可以让开发人员快速搭建分布式服务的工具,比如配置管理、服务发现、熔断、智能路由等,它们可以在任何分布式环境中很好的工作:

更直接的讲,SpringCloud 介绍分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合,比如:
- Distributed/versioned configuration 分布式版本配置
- Service registration and discovery 服务注册和发现
- Load balancing 负载均衡
- Service-to-service calls 服务调用
同时,SrpingCloud的所有子项目都依赖于SpringBoot,所以SpringBoot和SpringCloud的版本之间也存在一定的对应关系,在使用时需要注意彼此间的对应匹配:

2. 服务拆分原则
拆分微服务一般遵循如下原则:
2.1 单一职责原则
在微服务架构中,一个微服务应该只负责一个功能或业务领域,每个服务应该有清晰的定义和边界,只关注自己的特定业务领域。
比较类似于,一个人专注的做一件事的效率远高于同时关注多件事情,而业务中如电商系统也是由多个服务共同构成的:

2.2 服务自治
服务自治是指每个微服务都应该具备高度自治的能力,即每个服务要能做到独立开发,独立测试,独立构建,独立部署,独立运行。
以上面的电商系统为例,每一个微服务应该有自己的存储、配置,在进行开发、构建、部署、运行和测试时,并不需要过多关注其它微服务的状态和数据:

2.3 单向依赖
微服务之间需要做到单向依赖,严禁导致循环依赖、双向依赖:

在特定场景下如果无法避免循环依赖或双向依赖,可以考虑使用消息队列等其它方式来实现。
注:微服务并无标准架构,合适的就是最好的,在架构设计的过程中,坚持”合适由于业界领先“,避免为了设计而设计
2.4 服务拆分示例
我们以电商系统中的一个管理服务为例,即订单管理:

概括的讲,这个页面提供了以下信息:
- 订单列表
- 商品信息
根据服务的单一职责原则,我们把服务拆分为:
- 订单服务:提供订单ID,获取订单详细信息
- 商品服务:根据商品ID,返回商品详细信息

3. 数据准备
对于上述案例,我们使用JDK-17版本和MySQL8版本进行构造,这里需要提前配置好。
根据服务自治原则,每个服务都应有自己独立的数据库。
订单服务:
-- 订单服务
-- 建库
create database if not exists cloud_order charset utf8mb4;
use cloud_order;
-- 订单表
DROP TABLE IF EXISTS order_detail;
CREATE TABLE order_detail (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '订单id',
`user_id` BIGINT ( 20 ) NOT NULL COMMENT '用户ID',
`product_id` BIGINT ( 20 ) NULL COMMENT '产品id',
`num` INT ( 10 ) NULL DEFAULT 0 COMMENT '下单数量',
`price` BIGINT ( 20 ) NOT NULL COMMENT '实付款',
`delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARACTER
SET = utf8mb4 COMMENT = '订单表';
-- 数据初始化
insert into order_detail (user_id,product_id,num,price)
values
(2001, 1001,1,99), (2002, 1002,1,30), (2001, 1003,1,40),
(2003, 1004,3,58), (2004, 1005,7,85), (2005, 1006,7,94);
商品服务:
-- 数据初始化
insert into order_detail (user_id,product_id,num,price)
values
(2001, 1001,1,99), (2002, 1002,1,30), (2001, 1003,1,40),
(2003, 1004,3,58), (2004, 1005,7,85), (2005, 1006,7,94);
-- 产品服务
create database if not exists cloud_product charset utf8mb4;
-- 产品表
use cloud_product;
DROP TABLE IF EXISTS product_detail;
CREATE TABLE product_detail (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '产品id',
`product_name` varchar ( 128 ) NULL COMMENT '产品名称',
`product_price` BIGINT ( 20 ) NOT NULL COMMENT '产品价格',
`state` TINYINT ( 4 ) NULL DEFAULT 0 COMMENT '产品状态 0-有效 1-下架',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARACTER
SET = utf8mb4 COMMENT = '产品表';
-- 数据初始化
insert into product_detail (id, product_name,product_price,state)
values
(1001,"T恤", 101, 0), (1002, "短袖",30, 0), (1003, "短裤",44, 0),
(1004, "卫衣",58, 0), (1005, "马甲",98, 0),(1006,"羽绒服", 101, 0),
(1007, "冲锋衣",30, 0

最低0.47元/天 解锁文章
2673





