快速开始
先决条件
首先本机先要安装以下环境,建议先学习了解springboot和springcloud基础知识。
开发环境
-
克隆代码库:
git clone https://gitee.com/toopoo/SpringCloud.git
-
安装公共库到本地仓库:
cd common && mvn install
cd auth/authentication-client && mvn install
- 生成ide配置:
mvn idea:idea
并导入对应的ide进行开发,IDE安装lombok插件(很重要,否则IDE会显示编译报错)
编译 & 启动
- 1.启动基础服务:
docker-compose -f docker-compose.yml up 服务名
或单个启动docker-compose up 服务名
在启动应用之前,需要先启动数据库、缓存、MQ等中间件,可根据自己需要启动的应用选择启动某些基础组件,一般来说启动数据库、redis、rabbitmq即可,其它组件若有需要,根据如下命令启动即可。
该步骤使用了docker快速搭建相应的基础环境,需要你对docker、docker-compose有一定了解和使用经验。(注:请使用阿里的docker镜像)
如你需要使用mysql,请自行搭建即可。
服务 | 服务名 | 端口 | 备注 |
---|---|---|---|
数据库 | postgres | 5432 | 目前各应用共用1个实例,各应用可建不同的database |
KV缓存 | redis | 6379 | 目前共用,原则上各应用单独实例 |
消息中间件 | rabbitmq | 5672 | 共用 |
日志收集中间件 | zipkin-server | 9411 | 共用 |
搜索引擎中间件 | elasticsearch | 9200 | 共用 |
日志分析工具 | kibana | 5601 | 共用 |
数据可视化工具 | grafana | 3000 | 共用 |
- 2.启动配置中心:
docker-compose -f docker-compose.yml -f docker-compose.config.yml up apollo-portal
该步骤不是必须,若你想使用apollo为配置中心,通过以上命令启动即可。目前仅demos/producer应用使用了apollo作为配置中心
服务 | 服务名 | 端口 | 备注 |
---|---|---|---|
apollo配置中心 | apollo-portal | 8070 | 配置中心管理后台,访问地址http://localhost:8070 |
- 3.创建数据库及表
只有部分应用有数据库脚本,若启动的应用有数据库的依赖,请初使化表结构和数据后再启动应用。
子项目脚本
路径一般为:子项目/db
如:auth/db
下的脚本,请先执行ddl建立表结构后再执行dml数据初使化
应用脚本
路径一般为:子项目/应用名/src/main/db
如:demos/producer/src/main/db 下的脚本
- 4.启动应用
根据自己需要,启动相应服务进行测试,cd 进入相关应用目录,执行命令: mvn spring-boot:run
以下应用都依赖于rabbitmq、eureka-server,启动服务前请先启动mq和注册中心
服务分类 | 服务名 | 依赖基础组件 | 简介 | 应用地址 | 文档 |
---|---|---|---|---|---|
center | eureka-server | 无 | 注册中心 | http://localhost:8761 | 注册中心文档 |
center | bus-server | 消息中心 | http://localhost:8071 | 消息中心文档 | |
center | config-server | 配置中心 | http://localhost:8888 | 配置中心文档 | |
sysadmin | organization | postgres、redis | 用户组织应用 | http://localhost:8010 | 待完善 |
auth | authorization-server | postgres、organization | 授权服务 | http://localhost:8000 | 权限服务简介 、授权server文档 |
auth | authentication-server | postgres、organization | 认证服务 | http://localhost:8001 | 认证server文档 |
auth | authentication-client | 无 | 认证客户端 | jar包引入 | |
gateway | gateway-web | redis | WEB网关 | http://localhost:8443 | WEB网关简介 WEB网关文档 |
gateway | gateway-admin | postgres、redis | 网关管理 | http://localhost:8445 | 网关管理后台文档 |
monitor | admin | 总体监控 | http://localhost:8022 | ||
monitor | hystrix-dashboard | 性能指标展示 | http://localhost:8021 | ||
monitor | turbine | 性能指标收集 | http://localhost:8031 |
- 5.案例示意图
以下是一个用户访问的的示意图,用户请求通过gateway-web应用网关访问后端应用,通过authorization-server应用登陆授权换取token,请求通过authentication-server应用进行权限签别后转发到"您的业务应用"中
authorization-server为授权应用,启动前请初使化好数据库,授权Server文档。
authentication-server为签权应用,若有新增接口,请初使化相关权限数据到resources表中。
gateway-admin可动态调整gateway-web的路由策略,测试前请先配置网关的转发策略,路由策略配置。
- 6.前端项目
确保gateway-web、organization、authorization-server、authentication-server服务启动,然后启动
前端项目(该项目目前还在开发中)
大家启动如有问题,可以先到这里看看,也可以加入交流群
测试
运行 mvn test
启动测试.
架构
开发指南
项目目录结构
├── auth --授权认证子项目
│ ├── authentication-server --认证组件服务端
│ ├── authentication-client --认证组件客户端
│ ├── authorization-server --授权组件服务端
│ ├── db --子项目公共数据库脚本
│ └── pom.xml --子项目maven配置文件
├── center --中心子项目
│ ├── bus --消息中心
│ ├── config --配置中心
│ ├── eureka --注册中心
│ └── pom.xml
├── common --通用子项目
│ ├── core --核心类库
│ ├── test --测试工具类库
│ ├── web --WEB核心类库
│ └── pom.xml
├── docs --文档及资源文件
├── data --server及服务数据存储目录
│ ├── elasticsearch --elasticsearch配置数据存储位置
│ ├── postgres --postgres数据库文件存储目录
│ ├── rabbitmq --rabbitmq数据文件存储目录
│ └── redis --redis数据文件存储目录
├── gateway --网关子项目
│ ├── gateway-web --基于springcloud gateway的网关
│ ├── gateway-admin --springcloud gateway的网关管理模块
│ └── pom.xml
├── sysadmin --系统管理子项目
│ ├── db --系统管理子项目数据库脚本
│ ├── organization --组织管理应用,包括用户、角色、资源、菜单、组织架构的管理
│ └── pom.xml
├── monitor --监控、日志及服务管理子项目
│ ├── admin --springboot admin管理
│ ├── hystrix-dashboard --hystrix监控
│ ├── turbine --turbine监控聚集
│ └── pom.xml
├── webapps --web项目的基础父工程,定义常用依赖等
│ ├── webapp-parent --web项目的父工程,新建业务应用父工程
│ └── pom.xml
├── demos --demos子项目
│ ├── consumer-feign --消费者服务 feign demo
│ ├── consumer-ribbon --消费者服务 ribbon demo
│ ├── producer --服务提供者,产品服务
│ ├── producer-jpa --服务提供者,产品服务,jpa和hateoas
│ └── pom.xml
├── .env --docker-compose环境变量配置文件
├── readme.md --readme文档入口
├── docker-compose.yml --docker compose配置文件,基础组件如数据库、运维组件
├── docker-compose.override.yml --docker compose配置文件,注册中心、网关、授权认证服务等
├── docker-compose.apps.yml --docker compose配置文件,应用demo
├── docker-compose.config.yml --docker compose配置文件,apollo配置中心
└── pom.xml --业务服务子项目
module目录结构
├── logs --日志目录
│ ├── spring.log
│ └── spring.log.2018-04-15.0.gz
├── pom.xml --module maven配置文件
├── src --源码目录
│ ├── main --源文件
│ │ ├── db --服务db脚本目录
│ │ │ ├── db.sql --创建库的脚本
│ │ │ ├── ddl --建表语句等ddl
│ │ │ │ ├── mysql --mysql ddl
│ │ │ │ └── postgres --postgres ddl
│ │ │ └── dml --基础数据dml
│ │ ├── docker --docker相关配置文件
│ │ │ └── Dockerfile --dockerfile
│ │ ├── docs --接口文档目录,一般由swagger生成
│ │ ├── java --java源码目录
│ │ │ ├── dao --数据操作层
│ │ │ ├── service --业务逻辑层
│ │ │ ├── provider --调用第三方服务的提供类
│ │ │ ├── rest --接口controller
│ │ │ ├── entity --实体类
│ │ │ │ ├── form --rest表单校验
│ │ │ │ ├── param --dao参数,可以由form转化来
│ │ │ │ ├── po --实体类
│ │ │ │ └── vo --视图对象
│ │ │ ├── events --事件或消息处理类
│ │ │ ├── config --配置类
│ │ │ ├── exception --异常处理相关类
│ │ │ ├── interceptor --拦截器相关类
│ │ │ └── task --定时任务
│ │ └── resources --配置文件目录
│ │ ├── application.yml --springboot的应用配置文件
│ │ └── bootstrap.yml --springboot的配置文件
│ └── test --测试目录
│ ├── java --java测试案例目录
│ └── resources --配置文件目录
│ └── application.yml --springboot test的配置文件
└── target --编译目标目录
开发规范
功能特性
基础模块
服务 | 使用技术 | 进度 | 备注 |
---|---|---|---|
注册中心 | Eureka | ||
配置中心 | Appollo | ||
消息总线 | SpringCloud Bus+Rabbitmq | ||
灰度分流 | OpenResty + lua | ||
动态网关 | SpringCloud Gateway | 多种维度的流量控制(服务、IP、用户等),后端可配置化 |
|
授权认证 | Spring Security OAuth2 | Jwt模式 | |
服务容错 | SpringCloud Hystrix | ||
服务调用 | SpringCloud OpenFeign | ||
对象存储 | FastDFS | ||
任务调度 | Elastic-Job | ||
分库分表 | Mycat | ||
数据权限 | 使用mybatis对原查询做增强,业务代码不用控制,即可实现。 |
开发管理
服务 | 使用技术 | 进度 | 备注 |
---|---|---|---|
代码生成 | 前后端代码的生成,支持Vue | ||
测试管理 | |||
文档管理 | Swagger2 |
运维监控
服务 | 使用技术 | 进度 | 备注 |
---|---|---|---|
服务监控 | Spring Boot Admin | ||
链路追踪 | SkyWalking | ||
操作审计 | 系统关键操作日志记录和查询 | ||
日志管理 | ES + Kibana、Zipkin | ||
监控告警 | Grafana |
平台功能
服务 | 使用技术 | 进度 | 备注 |
---|---|---|---|
用户管理 | 自开发 | 用户是系统操作者,该功能主要完成系统用户配置。 | |
角色管理 | 自开发 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分。 | |
菜单管理 | 自开发 | 配置系统菜单,操作权限,按钮权限标识等。 | |
机构管理 | 自开发 | 配置系统组织机构,树结构展现,可随意调整上下级。 | |
网关动态路由 | 自开发 | 网关动态路由管理 |
联系交流
EMail:[email protected]
群1、2、3、4、5已满,请加群6
此些群仅为技术交流群,请大家不要讨论政治、发广告等与技术无关的东西。大家如若有问题可以在群里直接发问,我会抽空答复。
请大家问问题时尽量描述清楚背景与问题关键信息,描述的越清楚越容易得到答案。也更容易判断问题可能点,节省判断的时间,而不用来回问答。
同时也鼓励群友们积极回复已知的问题,大家相互帮助共同成长。如有bug或新需求也可以直接提交issue到github,我会酌情处理。
如果你发现你的问题很久都没有人答复,那很有可能就是问题描述的不够清楚,别人无法回复。
问问题的三要素
-
说明背景,使用了哪个模块,要做什么?
-
怎么输入或操作的得到了什么结果? 截图,日志
-
哪里不明白或有什么疑问 ?