Why SpringCloud
Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。
SpringBoot 是 Spring 推出用于解决传统框架配置文件冗余,装配组件繁杂的基于 Maven 的解决方案,旨在快速搭建单个微服务,SpringCloud 是依赖于 SpringBoot 的,而 SpringBoot 并不是依赖与 SpringCloud,甚至还可以和 Dubbo 进行优秀的整合开发。
MartinFlower 提出的微服务之间是通过 RestFulApi 进行通信,具体实现:
-
RestTemplate:基于 HTTP 协议;
-
Feign:封装了 ribbon 和 Hystrix 、RestTemplate 简化了客户端开发工作量;
-
RPC:基于 TCP 协议,序列化和传输效率提升明显;
-
MQ:异步解耦微服务之间的调用;
Spring Boot
Spring Boot 通过简单的步骤就可以创建一个 Spring 应用。
Spring Boot 为 Spring 整合第三方框架提供了开箱即用功能。
Spring Boot 的核心思想是约定大于配置。
Spring Boot 解决的问题
-
搭建后端框架时需要手动添加 Maven 配置,涉及很多 XML 配置文件,增加了搭建难度和时间成本。
-
将项目编译成 war 包,部署到 Tomcat 中,项目部署依赖 Tomcat,这样非常不方便。
-
应用监控做的比较简单,通常都是通过一个没有任何逻辑的接口来判断应用的存活状态。
Spring Boot 优点
自动装配: Spring Boot 会根据某些规则对所有配置的 Bean 进行初始化。可以减少了很多重复性的工作。
比如使用 MongoDB 时,只需加入 MongoDB 的 Starter 包,然后配置的连接信息,就可以直接使用 MongoTemplate 自动装配来操作数据库了。简化了 Maven Jar 包的依赖,降低了烦琐配置的出错几率。
内嵌容器: Spring Boot 应用程序可以不用部署到外部容器中,比如 Tomcat。
应用程序可以直接通过 Maven 命令编译成可执行的 jar 包,通过 java -jar 命令启动即可,非常方便。
应用监控: Spring Boot 中自带监控功能 Actuator,可以实现对程序内部运行情况进行监控。
比如 Bean 加载情况、环境变量、日志信息、线程信息等。当然也可以自定义跟业务相关的监控,通过 Actuator 的端点信息进行暴露。
spring-boot-starter-web //用于快速构建基于 Spring MVC 的 Web 项目。
spring-boot-starter-data-redis //用于快速整合并操作 Redis。
spring-boot-starter-data-mongodb //用于对 MongoDB 的集成。
spring-boot-starter-data-jpa //用于操作 MySQL。
grayVersions = {"discovery-article-service":["1.01"]}
-
创建 Starter 项目,定义 Starter 需要的配置(Properties)类,比如数据库的连接信息;
-
编写自动配置类,自动配置类就是获取配置,根据配置来自动装配 Bean;
-
编写 spring.factories 文件加载自动配置类,Spring 启动的时候会扫描 spring.factories 文件;
-
编写配置提示文件 spring-configuration-metadata.json(不是必须的),在添加配置的时候,我们想要知道具体的配置项是什么作用,可以通过编写提示文件来提示;
-
在项目中引入自定义 Starter 的 Maven 依赖,增加配置值后即可使用。
Spring Boot Admin(将 actuator 提供的数据进行可视化)
-
显示应用程序的监控状态、查看 JVM 和线程信息
-
应用程序上下线监控
-
可视化的查看日志、动态切换日志级别
-
HTTP 请求信息跟踪等实用功能
GateWay / Zuul
GateWay ⽬标是取代 Netflflix Zuul,它基于 Spring5.0+SpringBoot2.0+WebFlux 等技术开发,提供统⼀的路由方式(反向代理)并且基于 Filter(定义过滤器对请求过滤,完成⼀些功能) 链的方式提供了网关基本的功能,例如:鉴权、流量控制、熔断、路径重写、日志监控。
组成:
-
路由 route: 网关最基础的⼯作单元。路由由⼀个 ID、⼀个⽬标 URL、⼀系列的断⾔(匹配条件判断)和 Filter 过滤器组成。如果断⾔为 true,则匹配该路由。
-
**断⾔ predicates:**参考了 Java8 中的断⾔ Predicate,匹配 Http 请求中的所有内容(类似于 nginx 中的 location 匹配⼀样),如果断⾔与请求相匹配则路由。
-
**过滤器 filter:**标准的 Spring webFilter,使用过滤器在请求之前或者之后执行业务逻辑。
请求前 pre 类型过滤器:做参数校验、权限校验、流量监控、日志输出、协议转换等;
请求前 post 类型的过滤器:做响应内容、响应头的修改、日志的输出、流量监控等。
GateWayFilter 应用到单个路由路由上 、GlobalFilter 应用到所有的路由上。