-
整体架构
- nginx作为反向代理服务器
- Spring Cloud 作为微服务实现方案
- 前后端分离
- 前端文件部署在nginx中
- 网关统一实现拦截认证
-
集成Spring Cloud 相关模块
- Eureka服务注册与发现
- Feign声明式调用
- admin微服务监控
- config分布式统一配置,支持本地和git,仅用于测试,各个微服务未使用
- hystrix-dashboard & hystrix-turbine 用于微服务熔断器监控
- sleuth服务请求链监控
- gateway实现网关,不使用zuul.
-
前端
- 前后端分离,单独部署
- html,css,javascript,jquery实现
- 前端部署在nginx中
-
网关
- spring dloud gateway实现
- 统一拦截请求并鉴权,确认当前请求是否需要登录
- 路由前端的请求
-
zookeeper统一配置中心
- 路径分为需登录才可访问以及无需登录普两种类型,需登录才可访问的路径需要各个微服务自行向zk设置
- 微服务向zk写入本应用的拦截路径配置
- 网关监听zk的拦截路径配置节点,有更新则更新网关本地的拦截路径配置
- 节点类型为无序临时节点,微服务下线时将会删除本节点的配置
-
登录认证方式
- JWT实现
- 登录成功之后后端会向前端返回生成的token
- 前端缓存token
- 前端每个请求都会带上Authorization的Header字段,也就是token
- 网关统一拦截校验是否为需要登录路径,需要登录则校验token是否有效,无效则跳转到登录页面
-
用户模块
- 用户注册 *
- 用户登录
├─microblog 父工程
├─── config-repo 配置中心配置文件
├─── FrontEnd 前端项目文件,nginx 配置文件
├─── img README.md文件所用图片
├─── microblog-blog 网关应用
├─── blog-dao
├─── blog-service
├─── blog-web
├─── microblog-common 公共实现类,配置为SpringBoot-starter
├─── microblog-chat 私信应用
├─── microblog-config 配置中心应用
├─── microblog-gateway 网关应用
├─── microblog-gateway-controller 网关控制层
├─── microblog-gateway-service 网关服务层
├─── microblog-gateway-dao 网关数据层
├─── microblog-log 日志模块
├─── microblog-msg 邮件和短信处理应用 ├─── microblog-msg-entity 相关的实体定义 ├─── microblog-msg-service 邮件和短信处理
├─── microblog-points 积分应用
├─── microblog-points-dao
├─── microblog-points-service
├─── microblog-points-web
├─── microblog-scheduler 任务调度应用
├─── microblog-scheduler-dao
├─── microblog-scheduler-service
├─── microblog-scheduler-web
├─── microblog-search 搜索应用
├─── microblog-support spring cloud 配套服务
├─── microblog-hystrix hystrix 监控应用
├─── microblog-sleuth
├─── microblog-admin 监控
├─── microblog-center 注册中心应用 port: 8001
├─── zipkin-server zipkin 监控
├─── mysql 数据库文件
├─── all 整个工程的sql文件
├─── microblog-sql-all-xxxx-xx-xx-xx:xx:xx.sql
├─── blog.sql 微博相关的sql
├─── job.sql 定时任务
├─── points.sql 积分应用
├─── quartz.sql quartz本身的sql
├─── user.sql 用户相关
├─── 项目的一些启动脚本
├─── github 上传脚本
├─── micro-blog 设计图.jpg
服务 | 端口 |
---|---|
microblog-center | 8001 |
microblog-admin-server | 8002 |
microblog-config-server | 8003 |
microblog-hystrix-dashboard | 8004 |
microblog-hystrix-turbine | 8005 |
zipkin-server | 9411 |
microblog-blog-web | 8006 |
microblog-chat | 8007 |
microblog-cache | 8008 |
microblog-filesystem | 8009 |
microblog-gateway | 8010 |
microblog-log | 8011 |
microblog-msg-service | 8012 |
microblog-points-web | 8013 |
microblog-scheduler-web | 8014 |
microblog-search-web | 8015 |
microblog-short-url | 8016 |
microblog-user-web | 8017 |
microblog-websocket | 8018 |
- 开发环境: IDEA
- 项目构建: Maven
- 前端开发工具: Brackets
- 版本管理: Git
- 思维导图软件: MindMaster
- 核心框架: Spring ,Spring MVC, Spring Boot, Spring Cloud
- 持久层: Mybatis
- 数据库: MySQL
- 数据库连接池: Druid
- 缓存: Redis
- 分布式锁: Redisson
- 反向代理服务器: Nginx
- 认证方式: JWT
- 网络通信: Netty
- 消息中间件: RocketMQ
- 搜索:elasticsearch
- 日志: Logback
- 日志聚合: Kafka + Logstash + elasticsearch + Kibana
- 前端:Html,Javascript,css,jquery
🍎
- Nginx 作为反向代理服务器,前端代码部署在Nginx中
- 微服务框架使用Spring Cloud实现
- 客户端--->Nginx--->Zuul--->微服务--->数据库
- 使用Quartz实现
- 支持分布式定时任务
- 实现任务增删改查
- 支持任务类注入Spring Bean
- 拦截日志
- 输送到Kafka服务器
- 整个系统为Logback+Kafka+LogStash+ElasticSearch+Kibana实现日志集中监控,避免单个微服务日志查看困难的问题
- 使用Swagger2.0实现
- 给整个系统的所有微服务提供统一的访问页面
- 使用Spring Cloud Zuul实现
- 访问路径拦截,校验是否需要进行JWK校验
- 使用Zookeeper获取各个微服务的拦截配置
- 为整个微服务提供通用的基础类
- AOP实现访问Url打印,注解配置
- AOP实现方法调用时间打印,注解配置
- 微服务向Zookeeper写入访问路径拦截配置的实现
- MySQL数据备份
- 通用Dto类
- Token校验具体逻辑业务实现
- RSA加解密业务实现
- 邮件,短信业务实现
- Zookeeper客户端封装
- 使用DockerFile构建镜像
- 项目文件夹中的build.sh为镜像构建脚本
- 项目文件夹中的run.sh为创建容器并启动脚本
- 相关语言和框架使用Html,CSS,JavaScript,Jquery,BootStrap.
- 前端代码部署在Nginx中
- Nginx同时也作为后端网关的代理服务器
- 用户注册登录,支持邮件、电话注册
- 密码传输加密
- 密码MD5之后再保存
- 图片验证码
- 登录之后使用JWK进行访问用户验证
- 用户信息修改
- 使用FastDFS实现
- 用于存放头像图片,微博图片
- 使用ElasticSearch实现
- 用于搜索用于,微博
- 使用LogStash实现和MySQL数据同步更新。使用定时任务监控MySQL数据删除情况,实现数据删除同步更新
整个系统中,有些url是不需要用户登录就可以访问的,有些是需要登录之后才能访问,因此需要进行路径拦截校验是否需要登录。
-
安装Redis并启动
-
安装Mysql并启动,导入sql文件
-
安装RabbitMQ并启动
-
安装elasticsearch并启动
-
安装nginx,配置文件,并启动
-
配置
6.1 配置Mysql用户名和密码
6.2 配置Redis用户名和密码
6.3 配置RabbitMq
6.4 配置elasticsearch
6.5 配置nginx
-
启动项目
-
访问路径
每次git提交时都会执行数据库备份操作,备份类位于数据库备份类。 备份的文件存放于数据库备份文件 目录:mysql/all,最新日期为最新的操作,文件名称(xxx/mysql/all/microblog-sql-all-2019-03-30-16:22:33.sql)。 工程目录:mysql 存放各个模块的sql文件
请选择日期最新备份文件进行数据库导入操作。
mysql -uroot -p
mysql> create database microblog
mysql> use microblog
//xxx/mysql/all/microblog-sql-all-2019-03-30-16:22:33.sql 为备份文件本身的目录
mysql> source xxx/mysql/all/microblog-sql-all-2019-03-30-16:22:33.sql
- 使用AOP实现
- 切面类定义
- 如何使用:
1.引入pom
<dependency>
<groupId>com.microblog</groupId>
<artifactId>microblog-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
2.application.yml配置
microblog:
common:
# 使能打印访问Url,在Controller方法上添加注解@PrintUrlAnno
printUrlEnable: true
# 使能打印方法执行耗时,在方法上添加注解@PrintUseTimeAnno
printUseTimeEnable: true
3.Controller方法上使用
@PrintUrlAnno
@PostMapping("/login")
public BaseResult login(@RequestBody Map<String, Object> requestMap){
}
4.输出
访问 com.microblog.chat.controller.UserController method = login 路径 = /user/login 描述:
- 获取方法执行时间: @PrintUseTimeAspect