框架演进历史
- 单体应用
Spring + MyBatis/Hibernate/JDBC + Struts/SpringMVC + jsp
打包成 war包,部署到 Tomcat
- 前后端分离
SpringBoot + Jquery + ajax
nginx+jar
负载均衡
微服务
单一职责,一个服务只解决一个业务领域的问题
服务:对外提供我们能处理的业务服务
优点:
服务职责小,服务间互不影响
代码量小,易于维护,减少代码冲突
便于迭代升级
耦合度低
缺点:
运维成本高
架构复杂
隐形问题变多,如不同服务间调用
常用组件
- 服务注册发现 Euraka
- 服务网关 Gateway
- 客户端负载均衡 Ribbon
- 熔断器 Hystrix (更换成:Sentinel)
- 分布式配置 Spring Cloud Config (更换成:Nacos)
- 服务调用 Feign
服务注册中心 Eureka
Netflix 开发的,基于 REST 服务的,服务注册和发现组件
创建 多 module maven工程,module 间无依赖,均为单体应用
各组件版本:
spring boot:2.2.5 spring cloud:Hoxton.SR3 Jdk:1.8
- 新建项目
- 配置 maven 镜像,本地仓库,IDE 构建项目依赖 maven,安装依赖
- 新增 module 引入eureka 依赖
- pom.xml 配置
- application.properties 配置服务信息
服务间调用 Feign
一个 http 请求调用的轻量级框架,可以以 java 接口注释的方式调用 Http 请求,而不需要像 java 中封装 HTTP 请求报文的方式直接调用
app-order:调用方
app-storage:被调用方
mybatis-plus:数据处理框架
lombok:简化代码,常用@Data注解,实体类省略 set、get、toString 方法
注意:集成 mybatis-plus 要把mybatis、mybatis-spring去掉,避免冲突;
服务网关 GateWay
目的:提供简单有效的 API路由,基于 Spring Framework5、Spring Boot 2.0 构建,WebFlux 实现,取代 Zuul
- 配置文件
1 | # 配置路由唯一 id |
基于网关可以做接口鉴权、限流等
JWT 鉴权
app-auth
- 生成 token
1 | String token = this.buildJWT(account, type); |
- 生成 JWT
1 | private String buildJWT(String account, String prefix ){ |
server-gateway
RequestGlobalFilter 实现 filter
配置文件增加 ignore.urls
ignore.urls=/auth/login,/authrefresh
增加 redis 配置
jwt工具校验 token
测试请求
启动server-eureka,server-gateway,app-auth,app-order,app-storage
先访问http://127.0.0.1:10010/order/v1/order/placeOrder/commit会提示“认证失败”
然后在请求中增加请求头Authorization和clientType,继续访问会提示“认证失败,请重新登录”。
请求登录接口http://127.0.0.1:10010/auth/login?account=admin&password=123456a,并添加请求头clientType,得到token和refreshToken
把上一步得到的token和使用clientType放到第一步的请求中,再次请求,会返回true。