第一章 spring cloud项目框架的搭建选择

1. 为什么选择 Spring cloud + Spring cloud Alibaba?

简介: 微服务技术对比和选择,版本说明

  • SpringCloud

    1. 全家桶+轻松嵌入第三方组件(Netflix 奈飞)
    2. 官网:https://spring.io/projects/spring-cloud
    3. 配套
    4. 通信方式:http restful
    5. 注册中心:eureka
    6. 配置中心:config
    7. 断路器:hystrix
    8. 网关:zuul/gateway
    9. 分布式追踪系统:sleuth+zipkin
  • Spring Cloud Alibaba
    ``` 全家桶+阿里生态多个组件组合+SpringCloud支持

官网 https://spring.io/projects/spring-cloud-alibaba

配套

通信方式:http restful 服务注册发现:Nacos 服务限流降级:Sentinel 分布配置中心:Nacos 服务网关:SpringCloud Gateway 服务之间调用:Feign、Ribbon 链路追踪:Sleuth+Zipkin

  1. - 为什么要选择SpringCloudAlibabaCloud的区别

官网 https://spring.io/projects/spring-cloud-alibaba#overview

SpringCloud和AlibabaCloud组件存在很大交集,互相配合

SpringCloud很多组件是基于第三方整合,目前多个已经不更新了,比如zuul、eureka、hystrix等

AlibabaCloud 提供一站式微服务解决方法,已经和SpringCloud进行了整合,组件互相支持

我们也习惯称为 Spring Cloud Alibaba

详细介绍:https://mp.weixin.qq.com/s/NMD52MLDY2Lq3LSeOcVwjA

  1. - Spring Cloud 2020.3版本更新内容
  2. 1. 阻断式升级<br />差不多在2019年的时候,Spring Cloud在其Roadmap里就宣布将要终结的一些库/版本,其中最重要的就是指Spring Cloud Netflix项目进入维护模式,然后计划在2020年完全移除。<br />Spring Cloud做出这样的决定其实也是“被迫的”。我们知道Spring Cloud一直以来把Netflix OSS套件作为其官方默认的一站式解决方案,那时的Netflix OSS套件基本跟Spring Cloud划等号。奈何呀,Netflix公司在2018年前后宣布其核心组件HystrixRibbonZuulArchaius等均进入维护状态。<br />虽然有Zuul 2.xArchaius 2.x,但它们均不能向下兼容,无法平滑升级,因此几乎等于无法使用<br />所以他来了,Spring Cloud 2020.0版本正式发布,基本将Netflix的东西都砍完了,除了Eureka,目前还保留下来的组件好像就剩Fegin了,这还是因为Feign虽然最初属Netflix公司,但从9.x版本开始就移交给OpenFeign组织管理了,因此不再划入Netflix管辖范畴,我们在项目中导入也变成了spring-cloud-starter-openfeign<br />spring cloud仅保留了Eureka组件
  3. **(1)服务注册中心**
  4. > **Eureka(重度患者)**<br />**Zookeeper**<br />**Consul**<br />**Nacos(推荐)**
  5. **(2)服务调用**
  6. > **Ribbon(轻度患者)**<br />**LoadBalancer**
  7. **(3)服务调用**
  8. > **Feign**(不推荐)<br />OpenFeign(推荐)
  9. **(4)服务降级**
  10. > Hystrix(不推荐)<br />resilience4j(国外使用多)<br />alibaba Sentinel(国内使用多)
  11. **(5)服务网关**
  12. > **Zuul**(不推荐)<br />Zuul2(胎死腹中)<br />gateway(推荐)
  13. **(6)服务配置**
  14. > **Config**(不推荐)<br />Nacos(推荐)
  15. **(7)服务主线**
  16. > Bus(不推荐)<br />Nacos(推荐)
  17. 新版移除的模块spring-cloud-netflix
  18. > spring-cloud-netflix-archaius
  19. spring-cloud-netflix-concurrency-limits
  20. > spring-cloud-netflix-core
  21. > spring-cloud-netflix-dependencies
  22. > spring-cloud-netflix-hystrix
  23. > spring-cloud-netflix-hystrix-contract
  24. > spring-cloud-netflix-hystrix-dashboard
  25. > spring-cloud-netflix-hystrix-stream
  26. > spring-cloud-netflix-ribbon
  27. > spring-cloud-netflix-sidecar
  28. > spring-cloud-netflix-turbine
  29. > spring-cloud-netflix-turbine-stream
  30. > spring-cloud-netflix-zuul
  31. > spring-cloud-starter-netflix-archaius
  32. > spring-cloud-starter-netflix-hystrix
  33. > spring-cloud-starter-netflix-hystrix-dashboard
  34. > spring-cloud-starter-netflix-ribbon
  35. > spring-cloud-starter-netflix-turbine
  36. > spring-cloud-starter-netflix-turbine-stream
  37. > spring-cloud-starter-netflix-zuul
  38. > Support for ribbon, hystrix and zuul was removed across the release train projects.
  39. 组件版本关系<br />![](https://gitee.com/BBQPlus/source-picture/raw/master/image-20210718100941589.png#id=VlSPB&originHeight=524&originWidth=1013&originalType=binary&ratio=1&status=done&style=none) <br />毕业版本依赖关系<br />![](https://gitee.com/BBQPlus/source-picture/raw/master/image-20210718101000323.png#id=cTg2w&originHeight=401&originWidth=691&originalType=binary&ratio=1&status=done&style=none) <br />
  40. <a name="93f275ec"></a>
  41. ## 2. 开发版本选择
  42. <a name="1954a0bd"></a>
  43. ### 2.1 最新版本改动较大,考虑整体开发使用,选择以下版本
  44. - 主体框架: `Spring Cloud Hoxton.SR8``Spring Boot 2.3.3.RELEASE``Spring Cloud Alibaba 2.2.1.RELEASE`
  45. - 统一注册:使用`nacos`作为注册中心,实现多配置、分群组、分命名空间、多服务的注册和发现功能
  46. - 统一认证:统一`Spring Oauth2`认证,采用jwt的方式,实现统一认证,增加自定义认证逻辑,支持多种登录模式
  47. - 业务监控:使用`Spring Boot Admin`监控各个独立Service的运行状态
  48. - 内部调用:使用`Feign` 支持内部调用
  49. - 业务熔断:采用`sentinel`实现业务熔断处理逻辑,避免服务间出现雪崩
  50. - 在线文档:使用`swagger`,实现在线Api文档的查看与调试
  51. - 消息中心:使用`RabbitMq`对业务进行异步处理
  52. - 业务分离:采用前后端分离,前端设计采用`quasar vue`
  53. - 链路追踪:使用`skyworking`进行链路追踪
  54. - 快速搜索:使用`elasticsearch`实现大数据的快速检索
  55. - 系统监控:使用`prometheus`进行docker容器监控,集成`Grafana`进行显示
  56. <a name="13ac71e0"></a>
  57. ### 2.2 项目目录结构
  58. ```lua
  59. microcloud -- 父项目,各模块分离,方便集成和微服务
  60. │ ├─micro-core -- 核心通用模块,主模块
  61. │ │ ├─micro-starter-common -- 封装通用模块
  62. │ │ ├─micro-starter-cloud -- 封装微服务模块
  63. │ │ ├─micro-starter-web -- 封装WEB服务基础模块
  64. │ │ ├─micro-starter-mybatis -- 封装Mybatis及数据库基础模块
  65. │ │ ├─micro-starter-rabbitmq -- 封装rabbitmq基础模块
  66. │ │ ├─micro-starter-elasticsearch -- 封装ElasticSearch模块
  67. │ │ ├─micro-starter-redis -- 封装redis基础服务模块
  68. │ │ ├─micro-starter-job -- 封装定时任务基础模块
  69. │ │ ├─micro-starter-dependences -- 基础依赖模块,提供其他微服务使用
  70. │ │─micro-service -- 微服务模块
  71. │ │ ├─micro-auth -- 统一认证服务
  72. │ │ ├─micro-gateway -- 微服务网关,统一鉴权
  73. │ │ ├─micro-mysql -- apiJson统一数据中台
  74. │ │ ├─micro-portal -- 第三方用户等管理平台
  75. │ │ ├─micro-upms -- 用户管理平台
  76. │ │ ├─micro-xxlJob -- 定时任务管理

2.3 单独微服务项目搭建

  • 单独微服务项目可引入micro-starter-dependences作为父依赖
    然后在 dependencies 中引入需要的依赖,根据不同模块进行构建
    1. <dependencyManagement>
    2. <dependencies>
    3. <dependency>
    4. <groupId>com.xykj</groupId>
    5. <artifactId>micro-starter-dependencies</artifactId>
    6. <!--后续使用release版本-->
    7. <version>0.0.1-SNAPSHOT</version>
    8. <type>pom</type>
    9. <scope>import</scope>
    10. </dependency>
    11. </dependencies>
    12. </dependencyManagement>