微服务01
0 导入黑马商城项目
01 安装MySQL
课前资料中有MySQL的目录:
内部有MySQL配置文件和初始化脚本:
将mysql文件夹复制到虚拟机/root
目录
创建一个通用网络:
docker network create hm-net
使用下面的命令来安装MySQL:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
--network hm-net\
mysql
此时,如果我们使用MySQL的客户端工具连接MySQL,应该能发现已经创建了黑马商城所需要的表:
02 后端
在课前资料提供了一个hmall目录:
复制到工作空间, 用idea打开, 项目结构如下:
按下ALT
+ 8
键打开services窗口,新增一个启动项:
在弹出窗口中鼠标向下滚动,找到Spring Boot
:
点击后应该会在services中出现hmall的启动项:
点击对应按钮,即可实现运行或DEBUG运行。
在HMallApplication
上点击鼠标右键,会弹出窗口,然后选择Edit Configuration
:
在弹出窗口中配置SpringBoot的启动环境为local:
点击OK配置完成。接下来就可以运行了!
启动完成后,试试看访问下 http://localhost:8080/hi
03 前端
直接在windows下将其复制到一个非中文、不包含特殊字符的目录下。然后进入hmall-nginx后,利用cmd启动即可:
# 启动nginx
start nginx.exe
# 停止
nginx.exe -s stop
# 重新加载配置
nginx.exe -s reload
# 重启
nginx.exe -s restart
特别注意:
nginx.exe 不要双击启动,而是打开cmd窗口,通过命令行启动。停止的时候也一样要是用命令停止。如果启动失败不要重复启动,而是查看logs目录中的error.log日志,查看是否是端口冲突。如果是端口冲突则自行修改端口解决。
启动成功后,访问http://localhost:18080测试
1.认识微服务
1.1.单体架构
单体架构(monolithic structure):顾名思义,整个项目中所有功能模块都在一个工程中开发;项目部署时需要对所有模块一起编译、打包;项目的架构设计、开发模式都非常简单。
当项目规模较小时,这种模式上手快,部署、运维也都很方便,因此早期很多小型项目都采用这种模式。
随着项目的业务规模越来越大,团队开发人员也不断增加,单体架构就呈现出越来越多的问题:
- 团队协作成本高:试想一下,你们团队数十个人同时协作开发同一个项目,由于所有模块都在一个项目中,不同模块的代码之间物理边界越来越模糊。最终要把功能合并到一个分支,你绝对会陷入到解决冲突的泥潭之中。
- 系统发布效率低:任何模块变更都需要发布整个系统,而系统发布过程中需要多个模块之间制约较多,需要对比各种文件,任何一处出现问题都会导致发布失败,往往一次发布需要数十分钟甚至数小时。
- 系统可用性差:单体架构各个功能模块是作为一个服务部署,相互之间会互相影响,一些热点功能会耗尽系统资源,导致其它服务低可用。
1.2 微服务
微服务架构,首先是服务化,就是将单体架构中的功能模块从单体应用中拆分出来,独立部署为多个服务。同时要满足下面的一些特点:
- 单一职责:一个微服务负责一部分业务功能,并且其核心数据不依赖于其它模块。
- 团队自治:每个微服务都有自己独立的开发、测试、发布、运维人员,团队人员规模不超过10人(2张披萨能喂饱)
- 服务自治:每个微服务都独立打包部署,访问自己独立的数据库。并且要做好服务隔离,避免对其它服务产生影响
1.3 SpringCloud
SpringCloud框架可以说是目前Java领域最全面的微服务组件的集合了。
目前SpringCloud最新版本为2022.0.x
版本,对应的SpringBoot版本为3.x
版本,但它们全部依赖于JDK17,目前在企业中使用相对较少。
SpringCloud版本 | SpringBoot版本 |
---|---|
2022.0.x aka Kilburn | 3.0.x |
2021.0.x aka Jubilee | 2.6.x, 2.7.x (Starting with 2021.0.3) |
2020.0.x aka Ilford | 2.4.x, 2.5.x (Starting with 2020.0.3) |
Hoxton | 2.2.x, 2.3.x (Starting with SR5) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
因此,我们推荐使用次新版本:Spring Cloud 2021.0.x以及Spring Boot 2.7.x版本。
在我们的父工程hmall中已经配置了SpringCloud以及SpringCloudAlibaba的依赖:
对应的版本:
这样,我们在后续需要使用SpringCloud或者SpringCloudAlibaba组件时,就无需单独指定版本了。
2.微服务拆分
2.1.熟悉黑马商城
首先,我们需要熟悉黑马商城项目的基本结构:
大家可以直接启动该项目,测试效果。不过,需要修改数据库连接参数,在application-local.yaml中:
hm:
db:
host: 192.168.198.130 # 修改为你自己的虚拟机IP地址
pw: 123 # 修改为docker中的MySQL密码
同时配置启动项激活的是local环境:(此处配置比yaml中的优先级要高)
2.1.1.登录
首先来看一下登录业务流程:
暂时无法在飞书文档外展示此内容
登录入口在com.hmall.controller.UserController
中的login
方法:
2.2.2.搜索商品
在首页搜索框输入关键字,点击搜索即可进入搜索列表页面:
该页面会调用接口:/search/list
,对应的服务端入口在com.hmall.controller.SearchController
中的search
方法:
这里目前是利用数据库实现了简单的分页查询。
2.2.3.购物车
在搜索到的商品列表中,点击按钮加入购物车
,即可将商品加入购物车:
加入成功后即可进入购物车列表页,查看自己购物车商品列表: