SpringCloud之消息总线(Spring Cloud Bus)刷新配置

一:简介

  1. Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,
    也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。Spring Cloud Bus可选
    的消息代理组件包括RabbitMQ,AMQP和Kafka等。
  2. 为什么需要使用Spring Cloud Bus去刷新配置?
            比如,我们现在有几十个微服务,而每个微服务又是多实例,当更改配置时,就需要重启多个微服务实例,
    会非常麻烦。Spring Cloud Bus的一个功能就是让这个过程变得简单,当远程Git仓库的配置更改后,只需要向
    其中的一个微服务实例发送一个Post请求,通过消息组件通知其它微服务实例重新拉去配置文件即可。
  3.  整体刷新配置的架构图
       SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第1张图片
  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服务,具体过程需要自行百度,网上教程很多 ,效果如下:
         SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第2张图片
         注意:RabbitMQ默认网页端口15672,AMQP默认端口5672(我们链接时用这个)
  2. 主工程parent
      SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第3张图片
      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服务
       SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第4张图片
       ⑴创建启动类SpringCloudEurekaServerApplication.java
                SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第5张图片
       ⑵创建配置文件application.yml文件
                SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第6张图片
       ⑶在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提供配置文件信息
         SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第7张图片
         ⑴创建服务启动类SpringCloudConfigServer.java
                 SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第8张图片
         ⑵创建配置文件application.yml文件(当然这里我们只需要启动一个服务实例即可,这里我们选中的是8888)
                 
    ---
    server:
      port: 8888
    spring:
      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: 9999
    spring:
      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服务
         SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第9张图片
         ⑴创建启动类SpringCloudConfigClientApplication.java
               SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第10张图片
         ⑵创建配置文件bootstrap.yml
                 
    ---
    server:
      port: 8762
    spring:
      application:
        name: config-client
      profiles: dev   
      cloud:
        config:
          name: config-client-dev #表示要获取的配置文件名称
          fail-fast: true
          discovery:
            enabled: true
            service-id: config-server #服务名称,表示从这个服务获取配置信息
    
    ---
    server:
      port: 8763
    spring:
      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上要获取的配置信息
          SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第11张图片
  7. 测试,按顺序启动springcloud-eureka-server,springcloud-config-server(启动一个8888端口实例即可),
    springcloud-config-client服务(两个实例8762和8763),当然MQ要启动。
     效果如下:
      SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第12张图片 
      首先分别访问8762和8763服务:
              
       
       那么下面我们修改一下GitHub上的配置文件信息:
        SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第13张图片
        再次请求8762,8763页面发现和上面一下,数据并没有变化。
        
        
        下面我们使用springcloud bus消息总线访问一下8762服务,刷新一下配置信息(使用Postman发送post请求)。
        路径:http://localhost:8762/actuator/bus-refresh
        下面再次刷新8762,8763页面,效果如下:
         SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第14张图片
         SpringCloud之消息总线(Spring Cloud Bus)刷新配置_第15张图片

你可能感兴趣的:(SpringCloud,springcloud,bus)