Sams System (Springcloud Alibaba Micro Service) 是一个基于 SpringCloud Alibaba 搭建的微服务框架,本框架旨在帮助大家学习以及在搭建微服务系统时提供参考。
目前计划的功能并没有完全实现,将会持续更新。也欢迎有兴趣的朋友一起参与提交代码。 如果你觉得此项目有价值,请给我点个star,谢谢!
├─doc 文档目录,架构设计、数据库设计...
├─cicd 持续集成文件及脚本
├─apisvc-auth 认证授权业务服务
├─apisvc-mall MALL业务服务
├─apisvc-oms OMS(Operation Manager System)运营管理系统
├─basic-beans 通用Bean模块,API参数基类、数据实体类基类
├─basic-common 全局同样包
├─basic-core 核心包
├─basic-dependencies 基础的依赖管理
├─compsvc-gateway 网关服务
├─front-mall MALL前端项目
├─microsvc-org 组织微服务
├─microsvc-user 用户微服务
├─starter-apisvc 业务服务的基础依赖模块,所有的业务服务都需要依赖此模块
├─starter-cache 缓存模块
├─starter-logger 日志模块
├─starter-microsvc 微服务的基础依赖模块,所有的微服务都需要依赖此模块
├─starter-mq MQ模块
├─starter-mybatis Mybatis模块,集成了Mybatis-plus
├─starter-pusher 推送模块,SMS、邮件、APP消息...
├─starter-route 路由模块,网关和业务服务需要依赖,微服务不需要,因为微服务不会去调用其他服务
├─starter-security 安全控制模块
├─starter-sequence 发号器模块,主键生成器
├─starter-swagger Swagger文档模块
├─starter-utils 通用工具模块
- 这个项目可以帮助你快速的启动一个基于
SpringCloud Alibaba
技术栈的微服务框架搭建 - 基于
SpringCloud Gateway
的网关系统,包括:认证、鉴权、路由、负载均衡、流控等 - 基于
AntDesignPro
的登录,包括用户名密码登录、短信验证码登录,实现了图形验证码防刷功能 Nacos
负责服务注册、配置管理Sentinel
负责流量控制、熔断降级、系统负载等多个维度保护服务的稳定性Seata
负责分布式事务管理- 前端使用了
AntDesignPro
框架,参考这个项目,你可以快速的开启集成开发 - 基于
SpringBoot3
项目更容易集成到多个平台(K8S、Istio) - 演示了如何通过starter扩展功能(Doc、Route)
- 演示了如何统一控制接口规范
- 演示了如何规范异常处理
- 演示了如何规范使用
Mybaits
、Mybatis-Plus
、分页 - 演示了单元测试、mock测试、测试数据回滚,包括对controller、service的测试
- 项目分包明确,规范微服务的开发模式,使包与包之间的分工清晰
- 链路追踪
- ES日志管理
- 前台地址:http://sams.webestar.cn
- 后台地址:http://sams-oms.webestar.cn
- Sentinel: http://sams.webestar.cn:8858 sentinel/sentinel
- JDK 17
- MySQL 8
- Redis
- NodeJS 16+
- Yarn
- Nacos 2.2.0
- Sentinel 1.8.6
- Seata 1.6.1
- SpringBoot 3
- SpringCloud 2022.0.0
- SpringCloud Alibaba 2022.0.0.0
需要提前下载安装好以上内容
>git clone https://github.com/bestaone/sams.git
在你的mysql8数据库中创建两个库sams_user、sams_org,并分别执行下面脚本:
sams\doc\db\sams_user.sql
sams\doc\db\sams_org.sql
docker run -d \
-e MODE=standalone \
-e JVM_XMS=256m -e JVM_XMX=256m \
-e PREFER_HOST_MODE=hostname \
-p 8848:8848 -p 9848:9848 -p 9849:9849 \
--privileged=true \
--restart=always \
--name nacos-2.2.0 \
nacos/nacos-server:v2.2.0
需要Nacos支持MySQL数据库,参考文档:Nacos使用
http://127.0.0.1:8848/nacos
账密:nacos\nacos
- 进入nacos管理页面,在"命名空间"中创建命名空间
sams
- 在
配置管理->配置列表
中,导入配置sams\doc\nacos\nacos_config_export.zip
下列两种方式任选一种
- 下载Jar安装启动
>java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
- Docker安装启动
>docker run --name sentinel -d -p 8858:8858 -p 8719:8719 -d bladex/sentinel-dashboard:1.8.0
- 创建数据库seata,导入数据
doc/seata/seata-server-1.6.1.sql
到seata
库,导入doc/seata/seata-client-1.6.1.sql
到sams_user
和sams_org
库 - 直接部署【推荐】
#下载解压后,修改配置文件 seta-1.6.1/conf/application.yml
>cd seata-1.6.1
>./bin/seata-server.sh -h 127.0.0.1
- Docker部署,支持自定义配置
#先启动容器
>docker run -d -p 8091:8091 -p 7091:7091 --name seata-serve seataio/seata-server:1.6.1
#将配置复制到宿主机
>docker cp seata-serve:/seata-server/resources /User/seata/config
#修改完配置,通过挂在目录的方式启动
>docker run -d --name seata-server -p 8091:8091 -p 7091:7091 -e SEATA_IP=127.0.0.1 -v /Users/zgs/Documents/install/seata-1.6.1/config/resources:/seata-server/resources seataio/seata-server:1.6.1
如果是新手,建议用
直接部署方式
安装,因为Docker安装容易出现网络问题。 Docker安装的Seata,如果用的是远程Nacos,在注册到Nacos时,可能会使用Docker IP,从而导致网络不通。
- 控制台地址:http://127.0.0.1:7091 seata/seata
- 安装
# 启动服务端oap
docker run --name oap -p 11800:11800 -p 12800:12800 -e TZ=Asia/Shanghai --restart always -d apache/skywalking-oap-server:9.3.0
# 启动UI端
docker run --name oap-ui --link oap:oap -p 8989:8080 -e TZ=Asia/Shanghai -e SW_OAP_ADDRESS=oap:12800 --restart always -d apache/skywalking-ui:9.3.0
注:有时由于网络慢,网页会打不开,使用nginx反向代理下就行了(利用到了nginx的缓存加速)
- 集成
java -javaagent:/agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.158:11800 -DSW_AGENT_NAME=compsvc-gateway -jar /compsvc-gateway.jar
- 日志 略
在/etc/hosts
文件中加入下列配置(Mac电脑)
xx.xx.xx.xx nacos-server
xx.xx.xx.xx redis-server
xx.xx.xx.xx mysql-server
xx.xx.xx.xx sentinel-server
#换成正确的IP
- 构建
>cd sams
>mvn clean install
>cd front-mall
>yarn
- 启动网关
compsvc-gateway
>cd compsvc-gateway
>mvn spring-boot:run
- 启动认证服务
apisvc-auth
>cd apisvc-auth
>mvn spring-boot:run
- 启动用户微服务
microsvc-user
>cd microsvc-user/microsvc
>mvn spring-boot:run
- 启动前端
front-mall
>cd front-mall
>yarn start
- 账号登录
>curl --location --request POST 'http://127.0.0.1:7070/apisvc-auth/api/open/auth/login/account' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "admin",
"password": "123456"
}'
#返回结果
{
"code":100000,
"data":{
"accessToken":"eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NzU1MDI3NzAsInN1YiI6IjY3ODkyMDUxOTc4MTE3MTIiLCJjcmVhdGVkIjoxNjc1NDkxOTcwOTUyfQ.SWddCcr1Se6e9lJUXlRJAfQr0zE27iNbSQs2AGwj5pY41O7vDVK6Wm11mbx86JfOBY05nTkl1hQ0S5DGQ3NQiA",
"expireIn":10800,
"refreshToken":"1589fea7f09f40e7af7713a4b570e8be"
}
}
- 获取登录用户信息
>curl --location --request POST 'http://127.0.0.1:7070/apisvc-auth/api/auth/currentUser' \
--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NzU1MDI3MjAsInN1YiI6IjY3ODkyMDUxOTc4MTE3MTIiLCJjcmVhdGVkIjoxNjc1NDkxOTIwNTU2fQ.jHaUv6Pi48w6XXcX0rvU-8BxkGQF56hKWJDm3INdm091i8pMYacuAM6_Zkv9PxalhSgKhVlUURE9Ylr2D9RYCA'
#返回结果
{
"code": 100000,
"data": {
"name": "admin",
"avatar": "https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png"
}
}
- 获取短信验证码
>curl --location --request POST 'http://127.0.0.1:7070/apisvc-auth/api/open/auth/send/sms?phoneNum=13712345678'
#返回结果
{
"code": 100000,
"data": 244249
}
- 短信验证码登录
>curl --location --request POST 'http://127.0.0.1:7070/apisvc-auth/api/open/auth/login/sms' \
--header 'Content-Type: application/json' \
--data-raw '{
"phoneNum": "13712345678",
"smsCode": "244249"
}'
#返回结果
{
"code": 100000,
"data": {
"accessToken": "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NzU1MDM0OTgsInN1YiI6IjY3ODkyMDUxOTc4MTE3MTIiLCJjcmVhdGVkIjoxNjc1NDkyNjk4MDMwfQ.1bBFQ5G2Vl-xT880ecuUPfUSqaiNCv-q4_DlCJAIW1iU0FSk49sYHKjFJTdICOpwsOtHcxgHL20cTpltfMbHYA",
"expireIn": 10800,
"refreshToken": "f5e1912b338742f5aa7fafd4e50d62e0"
}
}
accessToken
即为访问接口的凭证
- 修改配置值 修改文件 sams/cicd/docker/start.sh
#将下列内容,换成你的ip
echo '192.168.0.158 nacos-server' >> /etc/hosts
echo '192.168.0.158 mysql-server' >> /etc/hosts
echo '192.168.0.158 redis-server' >> /etc/hosts
echo '192.168.0.158 sentinel-server' >> /etc/hosts
- 构建镜像
#编译构建完后执行下列命令
>cd sams
>mkdir temp
>cp -rf ./front-mall/dist temp/
>cp -rf ./cicd/docker/* temp/
>cp ./apisvc-auth/target/apisvc-auth.jar temp/
>cp ./apisvc-mall/target/apisvc-mall.jar temp/
>cp ./compsvc-gateway/target/compsvc-gateway.jar temp/
>cp ./microsvc-user/user-microsvc/target/microsvc-user.jar temp/
>cp ./microsvc-org/org-microsvc/target/microsvc-org.jar temp/
>cd temp
>docker build -t sams:1.0 .
#完成后会生成镜像 sams:1.0
- 启动运行
>docker run -d --name sams -p 10080:80 sams:1.0
- 验证,访问页面: http://127.0.0.1:10080
本项目执行 MIT 协议