博客
关于我
SpringCloud之消息总线(Spring Cloud Bus)刷新配置
阅读量:282 次
发布时间:2019-03-03

本文共 6596 字,大约阅读时间需要 21 分钟。

一:简介

  1. Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,
    也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。Spring Cloud Bus可选
    的消息代理组件包括RabbitMQ,AMQP和Kafka等。
  2. 为什么需要使用Spring Cloud Bus去刷新配置?
            比如,我们现在有几十个微服务,而每个微服务又是多实例,当更改配置时,就需要重启多个微服务实例,
    会非常麻烦。Spring Cloud Bus的一个功能就是让这个过程变得简单,当远程Git仓库的配置更改后,只需要向
    其中的一个微服务实例发送一个Post请求,通过消息组件通知其它微服务实例重新拉去配置文件即可。
  3.  整体刷新配置的架构图
       
  4. 架构图的简单分析
       ⑴Eureka-Server服务
                这个服务主要是用来服务的注册和发现的,它是一个注册中心,我们会将Config Server,Config Client这些服务都注册进              去。
       ⑵ Config Server服务
                这个是一个分布式配置中心Config Server,通过它我们可以从远处Git仓库读取我们需要的配置文件,所以,Config Client
            服务可以通过连接它来获取自己需要的配置信息。
       ⑶ Config Client服务
                这个服务是Config客户端,它需要从Config服务端获取自己的配置文件信息。
       ⑷ 消息总线
                   可以理解为一个消息代理,它可以将分布式的节点都连接起来,也可以完成各个应用程序节点间的相互通信,
            这里我们主要用来广播配置文件的更改,并且消息总线的可选消息代理组件包括RabbitMQ,AMQP和Kafka等,这
            里我们选中的是RabbitMQ组件。
       ⑸/bus/refresh
                 这个是用来刷新配置的请求,当远程仓库的配置文件修改后,我们不需要重新启动各个子节点,只需向某一个
             子节点发送一个Post请求即可,消息总线会自动通知其它各个节点进行配置文件的刷新。        

二:实战例子

  1. 搭建RabbitMQ服务,具体过程需要自行百度,网上教程很多 ,效果如下:
         
         注意:RabbitMQ默认网页端口15672,AMQP默认端口5672(我们链接时用这个)
  2. 主工程parent
      
      pom.xml配置文件
      
    4.0.0
    com.kgf
    parent
    0.0.1-SNAPSHOT
    pom
    parent
    org.springframework.boot
    spring-boot-starter-parent
    2.0.3.RELEASE
    UTF-8
    UTF-8
    1.8
    Finchley.RELEASE
    org.springframework.cloud
    spring-cloud-dependencies
    ${spring-cloud.version}
    pom
    import
    springcloud-config-server
    springcloud-config-client
    springcloud-eureka-server

     

  3.  创建服务注册和发现中心springcloud-eureka-server服务
       
       ⑴创建启动类SpringCloudEurekaServerApplication.java
                
       ⑵创建配置文件application.yml文件
                
       ⑶在pom.xml文件中添加依赖
                
    4.0.0
    com.kgf
    parent
    0.0.1-SNAPSHOT
    springcloud-eureka-server
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
    org.springframework.boot
    spring-boot-starter-web
    org.springframework.boot
    spring-boot-maven-plugin

     

  4.  创建分布式配置中心springcloud-config-server服务,用来为springcloud-config-client提供配置文件信息
         
         ⑴创建服务启动类SpringCloudConfigServer.java
                 
         ⑵创建配置文件application.yml文件(当然这里我们只需要启动一个服务实例即可,这里我们选中的是8888)
                 
    ---server:  port: 8888spring:  cloud:    config:      server:        git:          uri: https://github.com/kangf897570/SpringcloudConfig          search-paths:          - respo1          username: kangf897570          password: Kangf@897570      label: master      application:    name: config-server   profiles: dev  eureka:  client:    service-url:      defaultZone: http://localhost:8761/eureka/ ---server:  port: 9999spring:  cloud:    config:      server:        git:          uri: https://github.com/kangf897570/SpringcloudConfig          search-paths:          - respo2          username: kangf897570          password: Kangf@897570      label: master      application:    name: config-server  profiles: test    eureka:  client:    service-url:      defaultZone: http://localhost:8761/eureka/
         ⑶在pom.xml中添加依赖
                
    4.0.0
    com.kgf
    parent
    0.0.1-SNAPSHOT
    springcloud-config-server
    org.springframework.cloud
    spring-cloud-config-server
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
    org.springframework.boot
    spring-boot-maven-plugin

     

  5.  创建分布式配置中心客户端springcloud-config-client服务
         
         ⑴创建启动类SpringCloudConfigClientApplication.java
               
         ⑵创建配置文件bootstrap.yml
                 
    ---server:  port: 8762spring:  application:    name: config-client  profiles: dev     cloud:    config:      name: config-client-dev #表示要获取的配置文件名称      fail-fast: true      discovery:        enabled: true        service-id: config-server #服务名称,表示从这个服务获取配置信息---server:  port: 8763spring:  application:    name: config-client  profiles: test   cloud:    config:      name: config-client-dev      fail-fast: true      discovery:        enabled: true        service-id: config-server
         ⑶在pom.xml中添加依赖
                
    4.0.0
    com.kgf
    parent
    0.0.1-SNAPSHOT
    springcloud-config-client
    org.springframework.cloud
    spring-cloud-starter-config
    org.springframework.boot
    spring-boot-starter-web
    org.springframework.boot
    spring-boot-starter-test
    test
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
    org.springframework.cloud
    spring-cloud-starter-bus-amqp
    org.springframework.boot
    spring-boot-starter-actuator

     

  6. 查看从GitHub上要获取的配置信息
          
  7. 测试,按顺序启动springcloud-eureka-server,springcloud-config-server(启动一个8888端口实例即可),
    springcloud-config-client服务(两个实例8762和8763),当然MQ要启动。
     效果如下:
       
      首先分别访问8762和8763服务:
              
       
       那么下面我们修改一下GitHub上的配置文件信息:
        
        再次请求8762,8763页面发现和上面一下,数据并没有变化。
        
        
        下面我们使用springcloud bus消息总线访问一下8762服务,刷新一下配置信息(使用Postman发送post请求)。
        路径:
        下面再次刷新8762,8763页面,效果如下:
         
         

转载地址:http://ryql.baihongyu.com/

你可能感兴趣的文章
Python九齿耙(Ninerake)数据采集大数据深度学习智能分析爬虫软件的正则表达式规则简介
查看>>
Delphi 10.3 Rio的RadioGroup1控件如何设置 Items 的排列为横向横排水平显示
查看>>
Kotlin实现冒泡排序
查看>>
NodeJS下TypeScript环境安装
查看>>
汽车后市场,小程序为何独占鳌头
查看>>
短视频小程序,互联网新风口
查看>>
彻底弄懂Python标准库源码(一)—— os模块
查看>>
Mybatis-plus代码生成器模板(MySQL数据库)
查看>>
使用redis管理Mybatis的二级缓存
查看>>
使用redis管理Mybatis-Plus的二级缓存
查看>>
Mybatis中的SQL语句等于、不等于和模糊查询的语法
查看>>
使用 github 搜索
查看>>
java有包名的类访问没有包名的类
查看>>
TIOBE 12月编程语言排行榜:Python有望第四次成为年度语言
查看>>
Python循环语句代码逐行详解:while、for、break和continue
查看>>
整型关键字的散列映射
查看>>
多位水仙花数-python(出现运行超时?不妨用减法计算)
查看>>
地下迷宫探索(后两个测试点无法通过?这里有你想要的答案)
查看>>
城市间紧急救援(dijkstra算法)
查看>>
小白看完都会了!阿里云大师深入拆解Java虚拟机,看完这一篇你就懂了
查看>>