springcloud:配置中心与Bus消息总线(2)

简介: springcloud:配置中心与Bus消息总线(2)

Bus 消息总线

一言以蔽之

分布式自动刷新配置功能

Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新

Bus是什么?

1.png



他能干什么?

2.png



为什么称之为总线?


什么是总线:

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理:

ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。


RabbitMQ环境配置

安装Erlang,下载地址:http://erlang.org/download/otp_win64_21.3.exe

3.png

1.png2.png

安装RabbitMQ,下载地址 :https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe

3.png



进入RabbitMQ安装目录下的sbin目录


D:\rabbitmq_server-3.7.14\sbin

1.png



打开命令行 : rabbitmq-plugins enable rabbitmq_management

1.png



执行完就可以看到

1.png



访问地址查看是否安装成功 : http://localhost:15672/


SpringCloud Bus动态刷新全局广播

必须先具备良好的RabbitMQ环境先


演示广播效果,增加复杂度,再以3355为模板再制作一个3366


设计思想设计思想

利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置

1.png



利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置(更加推荐)

2.png



图二的架构显然更加合适,图一不适合的原因如下


打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新职责

破坏了微服务各节点的对等性

有一定的局限性。例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改

给cloud-config-center-3344配置中心服务端添加消息总线支持


<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

更新配置文件

server:
  port: 3344
spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          uri:  https://github.com/hhf19906/springcloud-config.git  #git@github.com:hhf19906/springcloud-config.git
          search-paths:
            - springcloud-config
      label: master
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
eureka:
  client:
    service-url:
      defaultZone:  http://localhost:7001/eureka
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

给cloud-config-center-3355客户端添加消息总线支持


pom

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>


配置


server:
  port: 3355
spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      name: config
      profile: dev
      uri: http://localhost:3344
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka
management:
  endpoints:
    web:
      exposure:
        include: "*"

3366和3355照猫画虎


测试

修改Github上配置文件增加版本号


发送Post请求


curl -X POST “http://localhost:3344/actuator/bus-refresh”

1.png

一次发送,处处生效

此时查看配置中心

http://config-3344.com/config-dev.yml

查看客户端

http://localhost:3355/configInfo

http://localhost:3366/configInf

获取配置信息,发现都已经刷新了 , 一次修改,广播通知,处处生效


SpringCloud Bus动态刷新置指定通知

不想全部通知,只想定点通知


只通知3355

不通知3366

指定具体某一个实例生效而不是全部

公式:http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}

/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例

1.png


发送完之后会发现

只有3355更新了

3366没更新


全局通知流程图

2.png



请求先到 configserver告诉请求要刷新的配置,和是否定点通知

config server 从git 上拉取 对应配置

发送消息给消息总线,

消息总线发送消息,客户端接收

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
191 0
|
2天前
|
XML SQL Java
SpringCloud 基础配置
SpringCloud 基础配置
9 0
|
17天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
1月前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
1月前
|
开发框架 负载均衡 Java
Spring boot与Spring cloud之间的关系
总之,Spring Boot和Spring Cloud之间的关系是一种构建和扩展的关系,Spring Boot提供了基础,而Spring Cloud在此基础上提供了分布式系统和微服务架构所需的扩展和工具。
21 4
Spring boot与Spring cloud之间的关系
|
1月前
Springcloud-ribbon和hystrix配置
Springcloud-ribbon和hystrix配置
9 0
|
2月前
Springcloud-配置
Springcloud-配置
9 0
|
2月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
70 1
|
2月前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
246 0
|
17天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
27 0