IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spring Cloud Bus消息总线 -> 正文阅读

[大数据]Spring Cloud Bus消息总线

1、Bus消息总线

??Spring Cloud Bus是Spring Cloud体系内的消息总线,支持RabbitMQ和Kafka两种消息中间件。所谓消息总线,简单理解就是一个消息中心,众多微服务实例都可以连接到总线上,实例可以往消息中心发送或接收信息(通过监听)。例如:实例A发送一条消息到总线上,总线上的实例B可以接收到信息(实例B订阅了实例A),消息总线充当一个中间者的角色,使得实例A和实例B解耦,如下图所示。
在这里插入图片描述

通俗定义:bus称之为springcloud中消息总线,主要用来在微服务系统中实现远端配置更新时通过广播形式通知所有客户端刷新配置信息,避免手动重启服务的工作。

2、实现刷新配置原理

在这里插入图片描述

3、搭建RabbitMQ服务

3.0 下载rabbitmq安装包(使用docker安装更方便)

官方安装包下载:https://www.rabbitmq.com/install-rpm.html#downloads
在这里插入图片描述

3.1 将rabbitmq安装包上传到linux系统中

erlang-22.0.7-1.el7.x86_64.rpm
rabbitmq-server-3.7.18-1.el7.noarch.rpm

3.2 安装Erlang依赖包

rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm

3.3 安装RabbitMQ安装包(需要联网)

yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm
	注意:默认安装完成后配置文件模板在:/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example目录中,需要	
			将配置文件复制到/etc/rabbitmq/目录中,并修改名称为rabbitmq.config

3.4 复制配置文件

cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

3.5 查看配置文件位置

ls /etc/rabbitmq/rabbitmq.config

3.6 修改配置文件(参见下图:)

vim /etc/rabbitmq/rabbitmq.config 

在这里插入图片描述
将上图中配置文件中红色部分去掉%%,以及最后的,逗号 修改为下图:
在这里插入图片描述

3.7 执行如下命令,启动rabbitmq中的插件管理

rabbitmq-plugins enable rabbitmq_management

出现如下说明:
	Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

set 3 plugins.
Offline change; changes will take effect at broker restart.

3.8 启动RabbitMQ的服务

systemctl start rabbitmq-server
systemctl restart rabbitmq-server
systemctl stop rabbitmq-server

3.9 查看服务状态(见下图:)

前提是要关闭防火墙:systemctl stop firewalld
systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2019-09-25 22:26:35 CST; 7s ago
Main PID: 2904 (beam.smp)
Status: “Initialized”
CGroup: /system.slice/rabbitmq-server.service
├─2904 /usr/lib64/erlang/erts-10.4.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -
MBlmbcs…
├─3220 erl_child_setup 32768
├─3243 inet_gethost 4
└─3244 inet_gethost 4

在这里插入图片描述

在这里插入图片描述

3.10 访问web管理界面

这个ip根据你的虚拟机或者主机地址改变一下

192.168.159.2215672

在这里插入图片描述

3.11 登录管理界面

username:guest
password:guest

在这里插入图片描述

4、配置统一配置中心通过Bus连接到MQ服务

4.1 统一配置中心中引入Bus依赖

其实所有服务中都应该引入Bus依赖

<!--引入bus依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

4.2 配置config server配置文件

#通过Bus组件连接到mq服务
#mq主机
spring.rabbitmq.host=192.168.159.22
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/

在这里插入图片描述

4.3 重启config server

5、配置微服务(config client)通过Bus链接MQ服务

5.1 在所有微服务中引入Bus依赖

<!--引入bus依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

5.2 在所有微服务项目中配置MQ连接配置,主要这段配置要放入远端仓库管理

在这里插入图片描述

5.3 重启所有微服务时出现报错

在这里插入图片描述
??错误原因:引入bus依赖启动立即根据配置文件bus配置连接到mq服务器,但是此时mq配置信息都在远端仓库,因此Bus连接不到mq直接报错,阻止了应用启动。
?&emsp**;解决方案**:允许项目启动时Bus组件立即连接mq这个失败,因为获取远端配置之后可以再以远端配置初始化bus组件

#启动时当远端配置还没有拉取完整时,项目启动过程中的所有失败都是允许的
spring.cloud.config.fail-fast=true

5.4 通过向config server 统一配置发送post方式请求实现自动配置更新

注意: /actuator/bus-refresh 必须在config server中暴露:
添加配置:

#开启所有web端点暴露
management.endpoints.web.exposure.include=*

刷新所有服务:

http://localhost:8848(configserver地址)/actuator/bus-refresh

在这里插入图片描述
刷新指定服务:

http://localhost:8848(configserver地址)/actuator/bus-refresh/服务id

6、总结

??这样的实现方式没有问题,但还是有点不足,那就是还需要在远端的配置更新之后,我们还是需要人为发送post请求,能不能做到远端配置更新时自动发送post请求呢?当然是可以的。
请看这篇Bus集成webhook实现自动刷新:https://blog.csdn.net/qq_43753724/article/details/120107658

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:05:11  更:2021-09-05 11:06:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:04:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码