SpringCloud Bus消息总线组件(内含:关于ERlang、RabbitMQ的安装出现的问题)

上一节说到,我们利用组件SpringCloud Config可以实现集中式的管理配置文件、不同环境不同配置、以及动态化的配置更新,可以根据不同的环境进行部署;但是我们在实际操作中,更改yml配置之后,不重启微服务的情况下,是不能直接获取到更新信息的;

这里,SpringCloud Bus孕育而生,就可以来解决我们当前这个问题,在不重启微服务的情况下,使用该组件来实现配置的自动更新;

1、我们可以通过一张图来了解SpringCloud Bus的运行机制:SpringCloud Bus运行机制
我们可以看到大致流程如下:
(1)我们在本地对配置文件进行更改之后,应该及时推送到我们的远程Git,进行远程库的更新(其实我们也可以直接在远程库上进行更新,无伤大雅~);

(2)然后应该发起一个请求来告知我们的config客户端我们配置已经发生更新并且提交至远程库;

(3)config 客户端接收到请求后便可以利用我们的server从配置服务器(Git)中获取到更新的配置并且把配置已更新这个消息发送到消息总线;

(4)消息总线接收到信息后便把 配置已更新 这个消息发送给其他客户端;

(5)其他Config客户端接收到消息后,也可以从Config-Server中来获取到相应的更改的配置信息;

(6)这样一来,全部客户端均可接收到更新的配置信息。

下面我们来模拟SpringCloud Bus的工作机制:
(1)先在我们需要加入Bus和RabbitMQ的服务下添加Bus、RabbitMQ以及一个监听器的依赖

<!--这里添加上Bus和RabbitMQ的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!--添加一个监听器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

(2)紧接着我们添加一个yml文件(在里面我们不光需要对spring进行配置、还需要对rabbitMQ、消息总线的地址进行配置)

#我们以下的配置地址之所以写的是远程而没有直接写死的话是因为方便我们动态更新
spring:
  cloud:
    config:
      name: microservice-config-product #这里写的是github上product的配置名称。注意没有yml后缀名
      profile: dev #设置本次访问的环境配置项
      label: master #远程库的分支名
      uri: http://localhost:5001 #config配置中心地址,通过它获取microservice-config-product.yml配置信息
  #这里配置消息队列,(消息队列应该和cloud对齐)
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

#这里暴露触发消息总线的地址
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

(3)最后我们开始进行测试:先启动config服务端,再启动Eureka服务端,最后才是启动我们刚才配置好的服务提供者;
(4)再启动工作做好后,我们进入到服务中心记住我们此时注册的服务名(microservice-config-product);然后再远程git对其进行修改(改成microservice-config-product-bus);
(5)修改之后我们刷新服务中心,发现服务名并未进行改变~
(6)此时我们使用postMan工具发送Post请求: http://localhost:8001/actuator/bus-refresh :该地址为触发消息总线的地址!
(由上图的Springcloud Bus的工作机制可以发现,再发出更新请求后,我们的客户端就可以接收到更新)
(7)最后我们再次访问服务中心,此时我们发现该服务名已经发生变动~

关于@RefreshScope

1、在我们需要进行更新的类上加上该注释,无需重新启动微服务即可感受到更新的内容;

关于项目中更改数据源

1、在我们目标工程中新建一个DruidConfig配置类,在其方法上加上@RefreshScope注释(这里一定是在方法上而不是在类上!);

package com.mengxuegu.springcloud.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

//这里@RefreshScope注释 不应该写在类上,应该写在方法上
@Configuration   //因为我们该类为配置类,所以我们需要加上@Configuration注释
public class DruidConfig {
    @RefreshScope   //刷新数据源
    @ConfigurationProperties(prefix = "spring.datasource") //绑定数据源
    @Bean
    public DataSource druid() {
        return new DruidDataSource();
    }
}

2、由此一来,我们就能直接在git远程直接修改数据源配置,使用postman向消息总线发送请求 http://localhost:8001/actuator/bus-refresh ,并且无需重启微服务就可拉取到新配置信息;

关于ERlang、RabbitMQ的安装出现的问题:

(1)首先,我们要知道RabbitMQ是Erlang语言开发的,Erlang语言广泛用于并发或者是分布式系统的开发,在电信领域应用广泛,OTP(open telecom Platform)开放电信平台,是一个强大的软件包,可以利用其提供的很多工具来构建一个分布式的并发应用;
其作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件以及工具库,所以我们在安装RabbitMQ之前应该先安装OTP/Erlang,并且要求版本配对;

(2)其次,我们在安装完erlang之后需要对其进行环境变量的配置,这里我们出了一次错,是因为用户变量和系统变量中的配置冲突,故我们把用户变量中的配置清空(不用担心清空后这里会导致意想不到的错误,这里可以自行去百度“用户变量”、"系统变量"的区别),然后直接在系统变量中完成我们的环境变量填写(和配置jdk差不多):在系统变量中,我们新建一个ERLANG_HOME,并且在里面写上安装路径;在这里插入图片描述
在这里插入图片描述

随后在系统变量path中写上**%ERLANG_HOME%\bin**,需要记得加分号
在这里插入图片描述

(3)配置完成后我们直接在cmd敲出命令:erl 若出现以下版本号说明安装已经配置环境变量成功;
效果图
对于RabbitMQ的安装,
(1)在拿到安装包后进行傻瓜式的安装即可,但是得注意在安装路径中应该注意不能有空格以及中文字符!!!并且安装不成功的情况下进行卸载一定得卸载干净!不能在未卸载的情况下对文件进行覆盖安装,不然会造成“服务名无效”这个错误;启动报错
2、在报错之后我们进行多方尝试才发现可能是电脑名中出现中文字符、以及卸载不彻底造成的错误(该报错说明安装不成功,电脑中没有该服务,我们可以通过到进程中观察是否有该服务来判断是否安装成功);

3、除了在运行窗口进行启动服务,我们也可以通过命令行的形式,但是一定记得要管理员身份运行cmd,不然也会报错

4、安装管理插件:我们可以通过安装插件从而在浏览器端方便的管理RabbitMQ,在该指定目录下的窗口下输入以下命令:rabbitmq-plugins.bat enable rabbitmq_management(这里记得一定得是在sbin目录下面,而不是ebin下!)
在这里插入图片描述
5、于是,我们就可以在浏览器端通过端口号进入到RabbitMQ的管理页面;默认:http:localhost:15672;登录成功后初始账号为:guest/guest
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值