springcloud

springcloud 会使用 Finchley 这个版本,而它对 springboot 的版本依赖是 2.0.3.RELEASE。

参考:http://how2j.cn/k/springcloud/springcloud-intro/2035.html?p=37562

很不错的Java自学网站

一、单体架构

  1. 多个服务放在一块,会有缺点。
    • 修改部分代码,需要重新编译整个项目打包部署
    • 部分出错,导致整个项目不能使用
    • 性能瓶颈

二、分布式与集群

  1. 微服务:微服务简单说,一个 springboot 就是一个微服务,并且这个 springboot 做的事情很单纯。 比如 product-service 这个项目,就可以拆成两个微服务,分别是 数据微服务,和视图微服务,其实就是俩 springboot, 只是各自做的事情都更单纯~

  2. 服务注册:有了微服务,就存在如何管理这个微服务,以及这两个微服务之间如何通信的问题,所以就要引入一个 微服务注册中心概念,这个微服务注册中心在 springcloud 里就叫做 eureka server, 通过它把就可以把微服务注册起来,以供将来调用。

  3. 在业务逻辑上, 视图微服务 需要 数据微服务 的数据,所以就存在一个微服务访问另一个微服务的需要。
    而这俩微服务已经被注册中心管理起来了,所以视图微服务就可以通过注册中心定位并访问数据微服务了。

    springcloud_第1张图片

    4.分布式:简单说,原来是在一个springboot里就完成的事情,现在分布在多个 springboot里做。

    • 更新其中一个微服务,另一个不受影响
    • 可分开开发,只需约定接口,耦合性低
    • 如果其中一个微服务挂了,另一个正常使用

    5.集群:有两个 springboot, 他们提供的功能一模一样,只是端口不一样,这样就形成了集群。

    springcloud_第2张图片

    • 可承受负载X2,横向扩展
    • 如果 8001 挂了,还有 8002 继续提供微服务,这就叫做高可用 。

    三、springcloud父子(聚合)项目

    1. springcloud 比较特别,它由多个微服务组成, 所谓的微服务,就是 springboot。所以可以说springcloud 由多个 springboot 项目组成,而这些 springboot 之间又是围绕一个共同目的而存在的。 所以,为了便于组织这些 springboot 项目,采用 maven 父子-聚合 项目的方式来开发

    2. 默认是 jar, 修改为pom。 这样才可以作为父项目存在。

      pom

    3. 父项目的 pom.xml ,多了一个模块, 表示对子项目的关联

          childMavenProject
      
    4. 父项目src等都用不到,只需保留pom.xml、.idea、

    四、服务注册中心

    1. EurekaServerApplication是EurekaServer 启动类。它扮演的角色是注册中心,用于注册各种微服务,以便于其他微服务找到和访问。 所以 Eureka 这个单词是 “找到啦” 的意思。

    2. EurekaServer 本身就是个 Springboot 微服务, 所以它有 @SpringBootApplication 注解。
      @EnableEurekaServer 表示这是个 EurekaServer 。

      springcloud_第3张图片

    3. application.yml配置文件

      springcloud_第4张图片

    hostname: localhost 表示主机名称。
    registerWithEureka:false. 表示是否注册到服务器。 因为它本身就是服务器,所以就无需把自己注册到服务器了。
    fetchRegistry: false. 表示是否获取服务器的注册信息,和上面同理,这里也设置为 false。
    defaultZone: http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka/ 自己作为服务器,公布出来的地址。 比如后续某个微服务要把自己注册到 eureka server, 那么就要使用这个地址: http://localhost:8761/eureka/

    1. 运行 EurekaServerApplication,并访问:http://127.0.0.1:8761/这就是注册中心的管理界面,可以看到注册微服务信息。

五、注册数据微服务

  1. 创建子项目spring-data-service

  2. springcloud_第5张图片

    spring-cloud-starter-netflix-eureka-client 表示这是个 eureka 客户端。
    spring-boot-starter-web: 表示这是个web服务,会提供控制层

  3. application.yml

    springcloud_第6张图片

    设置微服务的名称: product-data-service
    设置注册中心的地址: http://localhost:8761/eureka/ , 与 eureka-server 中的配置 application.yml 遥相呼应

    springcloud_第7张图片

六、注册视图微服务

访问数据微服务,分为 Ribbon和 Feign两种方式,其中Feign是Ribbon的封装。

六.(一)Ribbon

  1. 客户端负载均衡:Ribbon 从注册中心获知这信息,然后由 Ribbon 这个客户端自己决定是调用哪个接口的微服务

  2. pom.xml

    springcloud_第8张图片

    pring-cloud-starter-netflix-eureka-client: eureka 客户端
    spring-boot-starter-web: springmvc
    spring-boot-starter-thymeleaf: thymeleaf 做服务端渲染

  3. springcloud_第9张图片

    Ribbon 客户端, 通过 restTemplate 访问 http://PRODUCT-DATA-SERVICE/products , 而 product-data-service 既不是域名也不是ip地址,而是 数据服务在 eureka 注册中心的名称。

  4. 启动类

    [外链图片转存失败(img-uUkcId60-1563958639633)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563948068666.png)]

    springcloud_第10张图片

  5. application.yml

    springcloud_第11张图片

    六.(二)Feign

    1. 注解方式主流!

    2. pom.xml

      [外链图片转存失败(img-w9wPpTPo-1563958639642)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563948333230.png)]

      jar包中多了 spring-cloud-starter-openfeign,用来支持 Feign 方式

    3. 启动类

      springcloud_第12张图片

      启动类, 注解多了个 @EnableFeignClients, 表示用于使用 Feign 方式

    4. application.yml

      springcloud_第13张图片

七、服务链路追踪zipkin

  1. 随着业务的增加,就会有越来越多的微服务存在,他们之间也会有更加复杂的调用关系。这个调用关系,仅仅通过观察代码,会越来越难以识别,所以就需要通过 zipkin 服务链路追踪服务器 来用图片进行识别。即可视化调用。

    springcloud_第14张图片

  2. 需要改造product-data-service和product-view-service以使其可以被追踪到。

  3. springcloud_第15张图片

  4. [外链图片转存失败(img-H3xWSIW8-1563958639671)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563949206517.png)]

  5. [外链图片转存失败(img-EvZVsg4F-1563958639673)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563949264634.png)]

八、搭建配置服务器

配置信息放在一个公共的地方,比如git, 然后通过配置服务器把它获取下来,然后微服务再从配置服务器上取下来,避免了一个个修改微服务里的配置信息,再一个个部署。

[外链图片转存失败(img-Z3LY0MxF-1563958639675)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563949462144.png)]

  1. 创建配置服务器子项目config-server

    pom.xml添加

    [外链图片转存失败(img-PFtIfCLN-1563958639677)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563951555988.png)]

  2. 启动类:

    [外链图片转存失败(img-wTqtR97b-1563958639682)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563951635351.png)]

    主要是 @EnableConfigServer 这个注解表示本springboot 是个配置服务器。使用的是 8030 端口。

  3. [外链图片转存失败(img-qBRXFJgh-1563958639686)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563951971848.png)]

    [外链图片转存失败(img-BrvuC6VG-1563958639688)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563951987064.png)]

    九、改造成客户端

    把现成的视图微服务-Feign改造成配置客户端,使得其可以从配置服务器上获取版本信息。

  4. pom.xml增加jar以便访问配置服务器

    [外链图片转存失败(img-wXZChinX-1563958639690)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563953032934.png)]

  5. 新增bootstrp.yml,系统方面的配置放在其中配置。

    配置config-server并移植eureka地址信息

    [外链图片转存失败(img-GbtSuEuG-1563958639691)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563953127135.png)]

  6. conreoller类

    [外链图片转存失败(img-zP1W1ksw-1563958639693)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563953302996.png)]

十、消息总线bus

为了解决 git 上的配置信息修改之后,可以自动地刷新到微服务里,而不是需要手动重启 config-server。

  1. springCloud 通过 rabbitMQ 来进行消息广播,以达到有配置信息发生改变的时候,广播给多个微服务的效果。所以需要先安装 rabbitMQ 服务器。
  2. TODO

十一、断路器 HYSTRIX

当被访问的微服务无法使用的时候,当前服务能够感知这个现象,并且提供一个备用的方案或给客户提示。

TODO

十二、断路器监控

TODO

十三、断路器聚合监控

TODO

十四、网关zuul

[外链图片转存失败(img-mielEKLC-1563958639696)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563956000015.png)]

  1. 创建zuul子项目

  2. pom添加zuul相关jar包

    [外链图片转存失败(img-8HOIXgLG-1563958639702)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563956572445.png)]

  3. 启动类:[外链图片转存失败(img-EVFL7bqg-1563958639703)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563957208935.png)]

  4. application.yml

    [外链图片转存失败(img-uG20sgQp-1563958639706)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563957314741.png)]

十五、总结

  1. 父项目中子模块:

[外链图片转存失败(img-CH2eGcfb-1563958639707)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563957451191.png)]

  1. [外链图片转存失败(img-D1hHF3Qi-1563958639711)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563957556887.png)]

    接口总结。。。

你可能感兴趣的:(云计算部门实习,springcloud)