二. Config 分布式服务配置中心 + Bus 消息总线

2023-10-29

一. 基础概述

  1. Bus 消息总线,支持 RabbitMQ 和 Kafka 消息,整合了 Java 事件处理机制和消息中间件功能,将分布式系统节点与消息系统连接起来的框架

  2. 通过 Bus 消息总线,实现管理和传播分布式系统间的消息,就像一个分布式执行器,可以用于广播消息,事件推送,实现指定功能,可以当做微服务,服务与服务之间的通信通道
    在这里插入图片描述

  3. 通过 config server 分布式配置中心+ Bus 消息总线的组合使用,解释基本原理: 消息总线内部集成了消息中间件,连接到 Config Server 配置中心服务的 Client 服务,监听 server 上消息中间件的指定 topic 主题,当 server 端接收到刷新请求时,将请求以 topic 主题模式进行广播给订阅该主题的 Client 端,进而实现一次执行多处生效,与指定生效的功能

  4. 有两种方式:一是通过 Config Server 端接收请求然后广播给连接到该 server 的 Client端,还有一种通过某个 Client 端接收请求,将请求(推荐使用方式一通过 Server 端接收请求进行广播,通过Client 端接收的弊端:Client 时一个单纯的微服务,违背了单一职责)
    在这里插入图片描述
    在这里插入图片描述

  5. 使用 Bus 消息总线首先要安装启动消息中间件,可以是 RabbitMq 或 kafka

二. Config 分布式服务配置中心 + Bus 消息总线 实现数据刷新

Config server 服务

  1. pom 文件引入依赖(需要暴露刷新端口,引入 spring-boot-starter-actuator)
		<!--config server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!-- 添加消息总线RabbitMQ支持 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
		<!--actuator 会用到 web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  1. application.yml 文件中增加整合 RabbitMQ 配置,与暴露刷新端口配置
server:
  port: 3344 #当前服务端口号

spring:
  application:
    name: cloud-config-center-service #当前服务名称

  cloud:
    config:
      server:
        git:
          #连接到的 gitHub 存放配置文件的仓库地址
          uri: https://github.com/weishuaiaaaa/springcloud-config01.git
          #搜索仓库中"config01"文件夹下的配置文件,仓库中必须要有该文件夹
          search-paths:
            - config01
          #gitHub 登入用户名密码
          username: weishuaiaaaa@163.com
          password: 1994sss
      ##读取仓库的哪个分支
      label: master

#Bus 消息总线使用,配置 rabbitMQ 消息中间件
rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest

#rabbitmq相关设置 ,暴露 bus刷新配置的端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

#=================eureka相关配置======================
eureka:
  client:
    register-with-eureka: true #true 表示将当前服务注册到eureka注册中心
    #true 表示是否在注册中心抓取已有的注册信息,集群环境时必须为true,配合ribbon进行负载
    fetchRegistry: true
    service-url:
      #eureka 注册中心访问连接,集群环境多个注册地址
      defaultZone: http://127.0.0.1:7001/eureka,http://127.0.0.1:7002/eureka
  instance:
    instance-id: configService3344 #配置当前服务向eureka注册中心注册时显示的服务器主机名称
    prefer-ip-address: true #配置在开发人员直接访问eureka服务器时显示当前eureka上注册的服务的ip
    lease-renewal-interval-in-seconds: 1 #指定定时向eureka注册中心发送代表当前服务心跳包的时间默认30秒
    lease-expiration-duration-in-seconds: 2 # Eureka 接收到当前服务最后一次发送代表正常心跳包的等待时间,超过则将当前服务在 Eureka 上踢除
#=================eureka相关配置end======================
  1. ``启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigCenterMain3344.class, args);
    }
}

通过 Config Server 端读取配置文件的 Client 服务

此处就一一个 3355 服务为示例,可能还会存在多个读取配置文件的 Client 服务

  1. pom 文件中引入依赖
		<!-- 添加消息总线RabbitMQ支持 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!--config Client 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  1. bootstrap.yml 文件中增加 RabbitMQ 配置与暴露刷新端点配置
server:
  port: 3355

spring:
  application:
    name: config-client3355
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
      uri: http://localhost:3344
  #注意点此处的rabbitmq 配置是与上面的spring对齐的否则会报错
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

#=================eureka相关配置======================
eureka:
  client:
    register-with-eureka: true #true 表示将当前服务注册到eureka注册中心
    #true 表示是否在注册中心抓取已有的注册信息,集群环境时必须为true,配合ribbon进行负载
    fetchRegistry: true
    service-url:
      #eureka 注册中心访问连接,集群环境多个注册地址
      defaultZone: http://127.0.0.1:7001/eureka,http://127.0.0.1:7002/eureka
  instance:
    instance-id: configClient3355 #配置当前服务向eureka注册中心注册时显示的服务器主机名称
    prefer-ip-address: true #配置在开发人员直接访问eureka服务器时显示当前eureka上注册的服务的ip
    lease-renewal-interval-in-seconds: 1 #指定定时向eureka注册中心发送代表当前服务心跳包的时间默认30秒
    lease-expiration-duration-in-seconds: 2 # Eureka 接收到当前服务最后一次发送代表正常心跳包的等待时间,超过则将当前服务在 Eureka 上踢除
#=================eureka相关配置end======================
  1. 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientMain3355.class,args);
    }
}

最终实现的效果

  1. 假设修改了 gitHub 上的配置文件,在不重启 Client 服务的情况下向让 Client 获取到新的数据,在以前,通过手动执行一个 post 请求,手动触发指定 Client 刷新获取新的数据,有几个 Client 就要请求几个
  2. 现在可以通过手动执行 Post 请求,触发 Server 端刷新,通过Server 端将刷新请求广播给连接该 Server 的所有 Client 端,并且可以在请求的末尾添加 “Client 服务名称:服务端口号” 指定哪个 Client 生效,不指定的则不会去执行刷新
  3. 发送 Post 请求,设置连接到该 server 所有 Client 执行刷新获取新的数据
    “http://config server ip 地址: server端口号/actuator/Config Server 服务中通过yml配置的暴露的刷新路径”
    在这里插入图片描述
  4. 发送 Post 请求,设置连接到该 server 指定 Client 执行刷新获取新的数据
    “http://config server ip 地址: server端口号/actuator/Config Server 服务中通过yml配置的暴露的刷新路径/client服务名称:服务端口号”
    在这里插入图片描述
  5. 当启动 Config Server 端与 Client 端后,底层实际通过 Bus 消息总线整个的消息中间件,创建了一个队列,连接 Server 端的 Client 监听该队列,当接收到请求后,Server 端会议 Topic 模式向队列中发送消息,匹配到的 Client 接收消息进行处理,执行刷新功能
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二. Config 分布式服务配置中心 + Bus 消息总线 的相关文章

  • 【笔记】下单但未支付的订单倒计时自动取消逻辑实现

    平常我们都用过淘宝 京东这些电商平台 同时肯定也在这些平台上面下过单 这种情况不保证大家都有遇到过 但做开发的 肯定也知道有这个环节的存在 确认货品配置无误之后 我们都会点击购买 随之而来的就是一个结算页 让你确认商品信息 收货地址 价格等
  • 数据库如何热备份

    1 1数据库冷备份 概念 在固定的周期内 人为的将数据库中的数据进行备份 一般一式三份 缺点 1 可能会造成数据丢失 2 如果数据量很多 则可能会导致备份时间很长 并且备份不能正常完成 说明 虽然冷备份有诸多的缺点 但是最好进行冷备份 因为
  • dubbo配置提供者和消费者

    1 找到对应的文件 提供者 消费者 参考dubbo官网 http dubbo apache org zh cn docs user quick start html
  • 微服务框架

    微服务框架 1 SOA思想 面向服务的架构 SOA 是一个组件模型 它将应用程序的不同功能单元 称为服务 进行拆分 并通过这些服务之间定义良好的接口和协议联系起来 接口是采用中立的方式进行定义的 它应该独立于实现服务的硬件平台 操作系统和编
  • Kafka——Mac搭建kafka环境

    1 下载Kafka安装包 下载地址 将压缩包移动到 usr local mv kafka 2 12 3 1 0 tgz usr local 解压 tar zxvf kafka 2 12 3 1 0 tgz 2 启动 启动zookeeper
  • 在centos在部署分布式文件存储系统Minio

    docker部署以及详细文档自取 链接 https pan baidu com s 14NhCk1SQZEHqzMubpUD0eQ 提取码 xyxy 0 应用场景 电商网站 海量商品图片 视频网站 海量视频文件 网盘 海量文件 社交网站 海
  • Springboot结合Redis实现分布式定时任务

    一 背景 之前分享过分布式定时任务的技术选型方案 分布式定时任务技术选型方案 个人青睐xxl job 分享了搭建接入流程 xxl job搭建方案 本次项目需求较为简单 同时时间紧张 下面介绍利用Redis锁实现分布式定时任务的方案 二 Sc
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • 项目实战之RabbitMQ冗余双写架构

    作者名称 DaenCode gt https blog csdn net 2302 79094329 作者简介 啥技术都喜欢捣鼓捣鼓 喜欢分享技术 经验 生活 人生感悟 尝尽人生百味 方知世间冷暖 所属专栏 项目所感所想 gt https
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • 深入理解软件测试中的Web请求流程!

    在软件开发的过程中 软件测试是不可或缺的一环 它有助于确保软件系统的稳定性 可靠性和安全性 而在众多测试中 Web请求流程的测试显得尤为重要 因为几乎所有的现代应用都离不开网络交互 接下来我们将深入探讨软件测试中完整的Web请求流程 帮助大
  • AI分布式训练:DDP (数据并行)技术详解与实战

    编者按 如今传统的单机单卡模式已经无法满足超大模型进行训练的要求 如何更好地 更轻松地利用多个 GPU 资源进行模型训练成为了人工智能领域的热门话题 我们今天为大家带来的这篇文章详细介绍了一种名为 DDP Distributed Data
  • 不会做项目惨遭部门领导批评,连刷35天分布式小册轻松拿下

    互联网发展到今天 用户数量越来越多 产生的数据规模也越来越大 应用系统必须支持高并发访问和海量数据处理的需求 对比集中式架构 分布式系统由于具有可扩展性 可以动态扩展服务和存储节点 使用廉价的机器构建高性能的服务 更适合如今的互联网业务 分
  • 一文弄懂事件Event与Kafka的区别

    事件 Event 和 Apache Kafka 是两个概念层面上有所不同的东西 它们在应用程序中的作用和使用场景也有很大的差异 1 概念和定义 事件 Event 事件是 系统内发生 的特定事情或状态变化的表示 在编程和软件设计中 事件通常被
  • Kafka基础—3、Kafka 消费者API

    一 Kafka消费者API 1 消息消费 当我们谈论 Kafka 消费者 API 中的消息消费时 我们指的是消费者如何从 Kafka 主题中拉取消息 并对这些消息进行处理的过程 消费者是 Kafka 中的消息接收端 它从指定的主题中获取消息
  • 网站被攻击了怎么恢复?如何在被攻击后第一时间接入高防恢复正常访问?

    网站受到攻击的原因是多种多样的 包括技术漏洞 人为疏忽 社会工程学等各种因素 保护网站的安全需要综合运用技术手段 当网站遭到攻击时 以下几个步骤可以帮助恢复网站的正常运行 1 分析攻击 首先要确认网站被攻击的类型和程度 以确定所需的恢复步骤
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • 【复现】遗传算法求解分布式电源选址定容问题并考虑环境因素研究【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 【复现】遗传算法求解分布式电源选址定容问题并考虑环境因素研究【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • Redis分布式锁--java实现

    文章目录 Redis分布式锁 方案 SETNX EXPIRE 基本原理 比较好的实现 会产生四个问题 几种解决原子性的方案

随机推荐

  • 高斯拟合原理_高斯过程回归(GPR)

    1 高斯过程是定义在连续域上的无限多个服从高斯分布的随机变量所组成的随机过程 2 高斯过程回归有两个视角 权重空间视角和函数空间视角 这两者是等价的 3 权重空间视角是贝叶斯线性回归与核函数的结合形式 4 函数空间视角是函数服从高斯过程的随
  • 人工智能的道德与伦理

    人工智能 人工智能 Artificial Intelligence 英文缩写为AI 它是研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术及应用系统的一门新的技术科学 谈到人工智能的伦理 首先就会想到各种机器人电影 从早些1968年的
  • LintCode-460. Find K Closest Elements

    Find K Closest Elements Given target a non negative integer k and an integer array A sorted in ascending order find the
  • mysql 输入密码后报错_mysql安装后输入密码登录不上数据库解决方案

    如果mysql你成功安装并且配置后 输入mysql u root p进入密码页面 输入密码后报错 错误为 MySQL ERROR 1045 28000 Access denied for user root localhost using
  • web前端需要掌握的PS技术

    做WEB前端 常常会用到的PS操作有以下几种 1 常规切图 2 生成图片资源 3 生成CSS代码 4 批量压缩图片 5 抠图技巧 6 修图技巧 7 图层操作 8 文字编辑 9 图像合成 前四个技术教程 web前端需要掌握哪些ps的操作呢 教
  • C语言 一维数组求和

    计算数组成员的总和是多少 include
  • 【Python】conda实现虚拟环境的创建

    conda实现虚拟环境的创建 虚拟环境的背景 在同一台主机上创建和运行不同的开发项目是一件很常见的事件 但是在这个过程中 难免会遇到项目的依赖具有差异的问题 即在每次切换不同的项目时 都必须考虑当前python软件包或模块的版本是否符合该项
  • 解决谷歌浏览器Chrome 代理设置不能上网的问题

    如图 打开fq软件后 就访问不了了 解决办法 如下图 点开设置 gt 直接搜索代理 gt 点击代理设置 在Intert属性中 gt 连接 gt 选择局域网设置 gt 设置成自动检测设置 保存 刷新网页就OK了
  • java学习过程报错合集

    1 基础入门篇 创建的新项目无法右键创建新的java文件 没有指定模版 去project structure创建一个需要的模版就可以创建模版 IDEA Error java 无效的源发行版 13 编译不统一我的理解是这样 如下操作可以解决
  • 机器学习---利用sklearn库实现SVM的花卉数据分类代码详解

    import numpy as np import pandas as pd from sklearn datasets import load iris from sklearn model selection import train
  • 会议OA项目之我的会议排座&批审功能

    目录 背景 一 会议排座 后台代码 前台代码 二 会议送审 后台代码 前台代码 背景 会议排座犹如我们日常生活中的餐桌礼仪 一般来说 面朝大门的座位是留给最年长或者最尊贵的客人的 所谓面朝大门即为尊说的就是这个 常遵循左卑右尊 而大门旁边的
  • 看亿级用户电商如何玩转SQL大数据

    图摘自微博 侵删 据艾瑞咨询的报道 2017 年中国家电行业 苏宁是最大的市场占有者 线上线下的组合 占据整个行业的 20 0 是京东 12 3 和国美电器 7 5 之和 而天猫已被拉入了第三阶梯 比较起来毫无竞争力 我认为家电行业要赶超前
  • Linux定时任务与开机自启动脚本

    转载自 https www cnblogs com asche p 10240994 html 开机自启动脚本 网上常见的脚本开机自启方法是 假设要自启的脚本位于 home user test sh 给脚本可执行的权限 sudo chmod
  • 所有事皆需全力以赴

    不是你没有成功的能力 只是你不够努力 任何事情都需要付出才有回报 坐着空想 而不付诸行动 永远不会成功 凡事皆需全力以赴 才会得到丰厚的回报 想成功吗 那么请告诉自己 一定要全力以赴 The master of asingle trade
  • Linux-centos7下彻底卸载mysql

    查考https www cnblogs com javahr p 9245443 html 一 使用以下命令查看当前安装mysql情况 查找以前是否装有mysql 1 rpm qa grep i mysql 可以看到如下所示 root lo
  • GD32替换STM32移植过程

    目录 1 硬件芯片移植 2 软件配置 2 1 修改外部晶振起振超时时间 2 2 增加DMA 功能 2 3 异常记录 1 硬件芯片移植 下面以 GD32F103RET6 替换 STM32F103RET6为例 硬件上使用对应的GD32芯片替换S
  • nlohmann/json中所有异常类型说明

    https github com nlohmann json blob develop include nlohmann detail exceptions hpp 这是异常类头文件 当然了在nlohmann json hpp中也包含了这些
  • Shopify 前端开发经验总结(问题及解决)

    对shopify的理解 个人理解不具有权威性 若有错欢迎指出 非常感谢 shopify其实就是一个为跨界电商准备的售卖网站 与其他淘宝和京东非常相似 但是对于商家来说 可能更具有个性化 我没有做过淘宝等网站的项目 不过我的理解是这些网站对于
  • 自动化测试-架构真题(三十)

    自动化测试工具主要使用脚本技术来生成测试用例 其中 是录制手工的测试用例时得到的脚本 线性脚本 结构化脚本 数据驱动脚本 共享脚本 答案 A 解析 线性脚本 录制手工测试用例得到的脚本 结构化脚本 具有逻辑结构和函数调用功能 数据驱动脚本
  • 二. Config 分布式服务配置中心 + Bus 消息总线

    目录 一 基础概述 二 Config 分布式服务配置中心 Bus 消息总线 实现数据刷新 Config server 服务 通过 Config Server 端读取配置文件的 Client 服务 最终实现的效果 一 基础概述 Bus 消息总