Java SpringCloud系列(三) —— Bus(消息总线)配合rabbitmq以及github实现配置文件自动实时更新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liboyang71/article/details/81169777

首先,整个课程系列需要同学们有一定的基础技能,分别是java、springboot、github以及基础的Linux的知识,其中springboot是各位同学一定要掌握的,如果没有springboot基础可以查看我之前的博客对 java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目java 搭建基于springboot的ssh(spring + springmvc + hibernate)的gradle项目(基础篇) 进行学习,关于github以及Linux方面可以在使用到的时候再进行学习以及准备。

现在我们开始进入springcloud系列第三篇,关于Bus(消息总线)配合rabbitmq以及github实现配置文件自动实时更新

1.Bus简介

在我们的springcloud系列二中,关于为何使用Bus以及提供的功能已经做了介绍,如果还不了解的同学可以点击前往 Java SpringCloud系列(二) —— config(配置中心)简介以及搭建 ,现在我们融入Bus是为了将我们的微服务架构体系更加的完善,好了直接上干货,我们开始添加Bus配合rabbitmq以及github实现配置文件动态更新。

2.Bus搭建

2.1 问题展示

继续上次的文章,我们现在启动之前搭建好的eureka、config以及csdn-client-one,并在csdn-clinet-one中提供如下接口,获取远程github的配置文件内容。

这里写图片描述

这里写图片描述
这里写图片描述

此时访问接口,成功拿到github配置文件中的内容,如下图所示。

这里写图片描述

这是我们上节课的内容,现在我们对此github配置文件内容进行修改,将name 改为 csdn-client-one1改为 csdn-client-one,如下图所示。

这里写图片描述

此时,我们访问刚才的接口,我们会发现拿到的配置文件的内容并没有被跟着一起更新。但是如果我们将csdn-client-one项目重启,就能拿到新的配置文件,这是怎么回事,难道每次我修改了配置文件要把所有影响到的服务都重启一遍吗,显然不是很现实,那现在我们就使用mq以及配合github的webhooks(钩子)来实现实时更新。

2.2 项目改造

1.准备工作

首先我们要使用rabbitmq自然就要搭建一个能用的rabbitmq,因为要实现整套功能需要将eureka、config、csdn-client-one以及mq都放到公网上,所以我准备了一台服务器,没有的同学也可以使用像花生壳等工具生成一个临时的域名使用,在这里就不过多解释,当然即使没有公网也不影响前面80%的操作,只不过无法跟github进行绑定,并不影响同学们前面的配置以及配置文件刷新功能的实现,关于rabbitmq的搭建同学们可以查阅我之前的文章 Linux 关于安装rabbitmq以及开启远程访问权限步骤 或使用docker进行安装,这里不是重点就不做赘述。

2.config改造
(1)首先我们需要添加bus依赖包,如下图所示
这里写图片描述

//消息队列
compile('org.springframework.cloud:spring-cloud-starter-bus-amqp')

(2)添加mq配置至配置文件中
这里写图片描述

#rabbitmq配置(此配置应该放在远程配置文件中,为方便演示放在此处)
spring.rabbitmq.host=ip地址
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin

3.改造csdn-client-one

同上,新增bus依赖以及配置文件中rabbitmq配置

4.查看rabbitmq

此时启动了config和csdn-client-one后查看rabbitmq中queue会发现多了两个queue,分别是config和csdn-client-one自动创建的,此时代表配置成功。

这里写图片描述

5.开放bus-refresh接口

这个接口主要是当配置文件修改时,我们会调用此接口,config会发送时间通知所有服务更新配置文件,从而达到配置实时更新效果。我们要在config服务的配置文件中添加如下配置

#开启所使用接口(主要使用bus-refresh)
management.endpoints.web.exposure.include=bus-refresh

这里写图片描述

6.添加@RefreshScope注解

此时我们要在csdn-client-one上要拿去远程配置文件内容的类上添加@RefreshScope注解。如下图所示

这里写图片描述

启动项目,按照最开始的流程进行调用,访问http://localhost:8082/get/name/info接口获取配置文件内容,然后修改配置文件内容,然后访问config的http://localhost:8080/actuator/bus-refresh接口,如下图所示。

这里写图片描述

之后再调用http://localhost:8082/get/name/info 接口,我们会发现,我们的配置文件获取内容已经是最新的了。

好了,以上就是Bus的使用场景,具体关于github只要同学们将此配置文件使用webhooks只要在此仓库进行修改时,自动触发config的/actuator/bus-refresh接口即可
这里写图片描述

猜你喜欢

转载自blog.csdn.net/liboyang71/article/details/81169777