当前位置: 首页 > news >正文

Spring Cloud全解析:配置中心之springCloudConfig使用消息总线进行动态刷新

使用消息总线进行动态刷新

Spring Cloud Bus是将分布式系统的节点与轻量级消息系统链接起来的框架,整合了java的时间处理机制和消息中间件功能,目前支持RabbitMQ和kafka,构建一个共用的消息主题,并让系统中所有的微服务实例都连接上来,该主题产生的消息会被所有实例监听和消费,所以被称为消息总线

动态刷新配置

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

有两种实现方式

第一种

利用消息总线触发一个客户端/bus/refresh,从而刷新所有客户端的配置

第二种

利用消息总线触发Config服务端的/bus/refresh端点,从而刷新所有客户端的配置,选用该方式比较合适

现使用第二种方式进行配置消息总线动态刷新

配置中心服务端

在配置中心服务端增加依赖

<!-- 消息总线进行配置动态刷新 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

增加配置

我用的是kafka进行的传输,需要配置kafka配置

spring:kafka:bootstrap-servers: localhost:9092consumer:group-id: test

消息总线需要触发/bus/refresh端点,需要暴露该端点

# 暴露bus刷新配置端点
management:endpoints:web:exposure:include: 'bus-refresh'
配置客户端

客户端增加依赖

<!-- 消息总线进行配置动态刷新 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

客户端增加配置

spring:kafka:bootstrap-servers: localhost:9092consumer:group-id: test
# 端点管理
management:endpoints:web:exposure:include: "*"  # 暴露端点,*表示全部暴露

配置被修改后,需要调用配置中心服务端的/bus/refresh端点来对所有的配置客户端进行配置刷新http://ip:port/actuator/bus-refresh ,使用post请求

如果想要定点配置刷新的话,可以指定某个实例

应用程序的每个实例都有一个服务ID,该服务ID的值可以用spring.cloud.bus.id设置,并且其值应按冒号分隔的标识符列表(从最小到最具体)排列。默认值是根据环境构造的,它是spring.application.nameserver.port(或spring.application.index,如果已设置)的组合。ID的默认值以app:index:id的形式构造,其中:

  • appvcap.application.name(如果存在),或者是spring.application.name
  • indexvcap.application.instance_index(如果存在),依次为spring.application.indexlocal.server.portserver.port0
  • idvcap.application.instance_id(如果存在)或随机值。

HTTP端点接受“ 目的地 ”路径参数,例如/bus-refresh?destination=customers:9000,其中destination`是服务ID。如果该ID由总线上的一个实例拥有,它将处理该消息,而所有其他实例将忽略它

如果想要自动刷新,可以配置git上的webHooks来触发http://ip:port/actuator/bus-refresh

https://zhhll.icu/2021/框架/微服务/springcloud/配置中心/springCloudConfig/3.使用消息总线进行动态刷新/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 测试金山文档 | WPS云文档
  • 使用Java调用Apache commons-text求解字符串相似性实战
  • Spring中的BeanFactoryAware
  • OCR调研
  • 【实现100个unity特效之20】用unity实现物品悬浮和发光像素粒子特效
  • EXCEL数据清洗步骤
  • 3.js - 顶点着色器、片元着色器的联系
  • JDK源码——ThreadLocal
  • 《光与夜之恋》3D建模含量超标,纯炫技还是释放新信号?
  • 你和NumPy之间,只差这40张图
  • Unity教程(十)Tile Palette搭建平台关卡
  • Spring自动注册-自定义标签解析
  • 【综合架构】存储服务 NFS
  • Unity 资源分享 之 恐龙Ceratosaurus资源模型携 82 个动画来袭
  • MongoDB基础
  • 【Amaple教程】5. 插件
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CentOS7 安装JDK
  • Git的一些常用操作
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Leetcode 27 Remove Element
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Less 日常用法
  • SSH 免密登录
  • vue学习系列(二)vue-cli
  • Vultr 教程目录
  • 将 Measurements 和 Units 应用到物理学
  • 悄悄地说一个bug
  • 数组的操作
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​插件化DPI在商用WIFI中的价值
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (多级缓存)多级缓存
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (七)Knockout 创建自定义绑定
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (转)LINQ之路
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .Net 高效开发之不可错过的实用工具
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .net经典笔试题
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @NestedConfigurationProperty 注解用法
  • @synthesize和@dynamic分别有什么作用?
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [Bugku]密码???[writeup]
  • [C++]:for循环for(int num : nums)