准备工作
在课前资料中给大家提供了黑马商城项目的资料,我们需要先导入这个单体项目。不过需要注意的是,本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此你必须做好一些准备:
Centos7
的环境及一个好用的SSH客户端- 装好Docker
- 会使用Docker
如果是学习过上面Docker课程的同学,虚拟机中已经有了黑马商城项目及MySQL数据库了,不过为了跟其他同学保持一致,可以先将整个项目移除。使用下面的命令:
cd /root
docker compose down
移除掉之前的MySQL的相关镜像
docker rmi root-hmall:latest mysql
删除所有的mysql相关配置
将之前准备的mysql的文件移动到Linux服务器上的root文件夹下
重新安装MySQL之前,需要配置重新创建网络,保证后续容器都在一个网络中
docker network create hm-net
docker network ls
创建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
查看一下
容器
列表
docker ps
看一下java的项目结构
将项目移动到自己的本地目录下
开发环境和正式环境的主要是靠profile进行区分的
直接启动会使用默认的配置:dev
启动参数是可以配置的,我们可以配置成local
启动之后显示的配置文件是这样的
访问一下这个地址:http://localhost:8080/hi
将nginx也移动到到这个目录下
启动一下,发现一闪而过,其实已经启动成功
start nginx.exe
启动异常的话,可以在日志文件中查看详细的信息
访问一下这个地址:http://localhost:18080/
能够登录成功说明,前后端是通的,不通的话,查看Java程序,看看哪个地方报错
单体架构
并发量大的时候,重要的功能可能被不重要的功能阻塞
搜索功能的平均响应时间是60ms
- 高并发的访问不重要的接口,会导致这个接口的新能下降
微服务
微服务架构,是
服务化思想
指导下的一套最佳实践架构方案。服务化,就是把单体体架构中的功能模块拆分为多个独立的项目。
- 粒度小
- 团队自治
- 服务自治
各个服务在不同容器中,商品服务宕机了不会导致交易容器的卡顿
熟悉原项目
登录
创建token使用的是hutool工具类中的方法
String token = jwtTool.createToken(user.getId(), jwtProperties.getTokenTTL());
自定义了一个工具类,工具类调用的其实还是
hutool的create方法来创建JWT
/**
* 创建 access-token
*
* @param userDTO 用户信息
* @return access-token
*/
public String createToken(Long userId, Duration ttl) {
// 1.生成jws
return JWT.create()
.setPayload("user", userId)
.setExpiresAt(new Date(System.currentTimeMillis() + ttl.toMillis()))
.setSigner(jwtSigner)
.sign();
}
拦截器获取用户的信息(用于权限鉴定和提示用户登录)
拦截器中定义了一个前置方法,用于获取请求头中的token,
- tomcat对于每个请求,都是一个请求单独一个线程
- 在UserContext中,用户的id只会设置在当前线程的线程域中
购物车
当商品价格变化的时候,可以看到价格的变化
- 因为购物车中存储的是当时价格,然后再去获取现在商品的价格