[toc]

一、config遇到的问题

当修改gitee上的配置文件,config服务立即更新,而客户端没有立即更新到最新配置。

上篇博客:https://liudongdong.top/archives/springclouder-shi-jiu-config-shi-xian-ban-zi-dong-hua-shua-xin

解决办法上篇说了俩个:

  1. 项目重启(生产根本不可能)
  2. 手动刷新(项目多的话,增加了额外的工作量)

那么有没有更好点的方法呢?
技术层面上是有的,目前用的是bus总线,这个bus说白了就是广播通知。内部是消息队列,客户端有订阅的就进行接收更新配置。

二、Bus总线介绍

1. 什么是总线

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

2. 基本原理

image.png

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

Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。

Spring Clud Bus目前支持RabbitMQ和Kafka。

3. bus作用范围

Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道
image.png

3. 环境准备

1. 安装rabbitmq

由于我本地下载mq实在太慢,所以采用docker进行安装mq。

对于新手学习新的技术还是安装最原始的,不要一上来就docker。虽然docker提供了很大的方便,但也屏蔽了很多了解技术的细节。

1. docker安装

我用的是虚拟机安装docker,并用docker进行安装rabbitmq

docker run --name postgres2 -e POSTGRES_USER='postgres' -e POSTGRES_PASSWORD='postgres' -p 5431:5432  -d rabbitmq:management

账户和密码,由于设置的是admin,登入后如下:
image.png

2. windows安装

本地下载安装包太慢,没有采用

  1. 安装Erlang
    http://erlang.org/download/otp_win64_21.3.exe
  2. 安装RabbitMQ
    https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe
  3. 输入以下命令启动管理功能
rabbitmq-plugins enable rabbitmq_management

image.png

  1. 访问并登入
    浏览器访问:http://localhost:15672/
    登入账号密码默认为:guest

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。