SpringCloudBus实现配置文件动态更新
前言
在SpringCloud之配置中心(config)的使用的基础上加上SpringCloudBus实现配置文件动态更新
在此之前需要修改版本,否则会出现“Endpoint ID 'bus-env' contains invalid characters, please migrate to a valid format.”错误导致服务启动失败
springboot版本:
2.0.6.RELEASE
springcloud版本:
Finchley.SR2
由于使用bus中需要使用消息中间件来支持更新通知并且它支持RabbitMQ和Kfaka,所以还需要启动其中之一,本文使用RabbitMQ,安装使用可参考RabbitMQ的安装(linux版)和RabbitMQ的安装与基本使用(windows版)
config-server端
依赖
<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>
配置文件
server.port=8050
spring.application.name=config-server
# 注册到服务注册中心
eureka.client.service-url.defaultZone=http://localhost:8090/eureka/
# github的仓库地址
spring.cloud.config.server.git.uri=https://github.com/kurean/springconfig.git
# github的文件路径
spring.cloud.config.server.git.searchPaths=repo
# github的分支,默认是master
spring.cloud.config.label=master
# 使用bus总线刷新配置文件
management.endpoints.web.exposure.include=bus-refresh //指定刷新地址
spring.cloud.bus.trace.enabled=true
# 使用rabbitmq传递消息
spring.rabbitmq.host=192.168.184.130
spring.rabbitmq.port=5672
spring.rabbitmq.username=test //可以自己在rabbitmq的web管理页面添加用户,不添加则可以使用默认账号guest
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/vHost_test //不指定默认为/
config-client端
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
配置文件application.properties
spring.application.name=config-client
server.port=9006
# 使用rabbitmq传递消息
spring.rabbitmq.host=192.168.184.130
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/vHost_test
在使用远程配置文件数据的地方加上@RefreshScope注解测试使用
@RestController
@RefreshScope
public class ConfigClientController { @Value("${cs.name}")
String name;
@Value("${cs.age}")
String age; @GetMapping(value = "/hi")
public String hi(){
return "我的名字是:"+name+",年龄是:"+age;
}
}
当git上的参数值修改后,需要利用消息总线触发一个服务端configServer的/bus/refresh端点,而刷新所有客户端的配置,所以发送请求http://localhost:8050/actuator/bus-refresh手动刷新配置中心,这样就会通知所有的微服务进行修改校正从而达到不用自己手动重启微服务重新读取配置的目的,但是要注意的是这个请求必须是post请求,这里推荐使用postman调试接口工具
修改后配置服务端和客户端日志:


动态刷新定点通知
其目的就是原先是无差别通知,如果想要定点通知某个微服务,那么就发送请求http://localhost:8050/actuator/bus-refresh/{destination},至于这个destination,则由微服务的服务名+端口号组成,比如http://localhost:8050/actuator/bus-refresh/config-client:9006则表示只通知config-client这个微服务进行配置修改
SpringCloudBus实现配置文件动态更新的更多相关文章
- spring boot 配置文件动态更新原理 以Nacos为例
配置文件的动态更新 通常获取配置文件的方式 1, @Value 2. @ConfigurationProperties(Prefix) 如果是在运行时要动态更新的话, 第一种方式要在bean上加@Re ...
- asp.net core 配置文件动态更新
IOptions<T> //站点启动后,获取到的值永远不变 IOptionsSnapshot<T> //站点启动后,每次获取到的值都是配置文件里的最新值 (reloadOnCh ...
- kill -HUP pid 更改配置后不重新启动服务,动态更新配置文件
kill -HUP pid kill -HUP pid pid 是进程标识.如果想要更改配置而不需停止并重新启动服务,请使用该命令.在对配置文件作必要的更改后,发出该命令以动态更新服务配置. 根据约 ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...
- mybatis(二)接口编程 、动态sql 、批量删除 、动态更新、连表查询
原理等不在赘述,这里主要通过代码展现. 在mybatis(一)基础上,新建一个dao包,并在里面编写接口,然后再在xml文件中引入接口路径,其他不变,在运用阶段将比原始方法更节约时间,因为不用再去手动 ...
- [原创]一种简单的cocos2d-x动态更新方案
介绍一个曾经在cocos2d-x项目中使用过的动态更新方案,这个方案简单易行,针对小的项目非常有用. 这个方案有两个核心的关键词:JSON,MD5. 原理可以简单地概括为:服务端持有所有动态更新资源文 ...
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课
centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更 ...
- Spring Cloud(八):使用Spring Cloud Bus来实现配置动态更新
使用Spring Cloud Config我们能实现服务配置的集中化管理,在服务启动时从Config Server获取需要的配置属性.但如果在服务运行过程中,我们需要将某个配置属性进行修改,比如将验证 ...
- .NET6运行时动态更新限流阈值
昨天博客园撑不住流量又崩溃了,很巧正在编写这篇文章,于是产生一个假想:如果博客园用上我这个限流组件会怎么样呢? 用户会收到几个429错误,并且多刷新几次就看到了内容,不会出现完全不可用. 还可以降低查 ...
- [RPC学习]Dubbo+nacos实现动态更新内存RTree
1.背景 服务架构一般都是从 单体架构 -> 微服务架构 -> 分布式架构 的迭代,我上一家公司就是在业务发展到一定规模时,开始拆老的单体服务,按业务维度拆成多个微服务,服务之间用的是HT ...
随机推荐
- Codeforces Round #844 (Div.1 + Div.2) CF 1782 A~F 题解
点我看题 A. Parallel Projection 我们其实是要在这个矩形的边界上找一个点(x,y),使得(a,b)到(x,y)的曼哈顿距离和(f,g)到(x,y)的曼哈顿距离之和最小,求出最小值 ...
- Java基础学习笔记-数据类型、数制
数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...
- NG-ZORRO + Angular11增加自定义全局样式,不影响其他页面全局样式,仅作用于当前页面
实现只需要两步 ts import { ViewEncapsulation } from '@angular/core';// 关键代码 @Component({ selector: 'app-tes ...
- angular Ionic CLI环境搭建安装以及栅格响应式布局
- three.js一步一步来--如何画出构造辅助线
可以参考下面代码,粘贴上去就有了~ <template> <div class="container"> <h1>初步构造出辅助线</h1 ...
- 【分析笔记】全志平台 gpio_wdt 驱动应用和 stack crash 解决
使用说明 第一次遇到看门狗芯片是通过切换电平信号来喂狗,如 SGM706 芯片,之前也比较少会用到看门狗芯片.原本打算参考 sunxi-wdt.c 的框架,利用定时器自己写一个,无意中发现内核已经有 ...
- .Net7运行模型之托管Main函数的调用
前言: .Net7的CLR最具特色的一个地方,就是运行模型.因为它主宰了整个CLR的运行过程. 又因为其庞大的代码量,有的几十万行甚至百万行.所以理解起来非常不容易.本篇拆分来看下,里面一个细节Mai ...
- Performance API不完全使用指北
本教程解释了如何使用Performance API来记录真实用户访问你的应用程序的统计数据. 使用浏览器的DevTools来评估web应用性能是很有用的,但要复现现实世界的使用情况并不容易.因为人们在 ...
- spring cloud alibaba sentinel 运行及简单使用
1.官网 英文:https://github.com/alibaba/Sentinel 中文:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7 ...
- javascript的防抖与节流
一.节流 一段时间内只能触发一次,如果这段时间内触发多次事件,只有第一次生效会触发回调函数,一段时间过后才能再次触发(一定时间内只执行第一次) 应用场景 1.鼠标连续不断地触发某事件(如点击),只在单 ...