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 ...
随机推荐
- [WPF]auto和*总结
Auto和*效果 Auto 表示自动适应显示内容的宽度, 控件有多大,就显示多大. * 则表示按比例来分配宽度. 话不多说,直接上例子理解 例子1 代码: <Grid ShowGridLines ...
- 为啥要对jvm做优化?
摘要:在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行.绝大部分的参数保持默认即可. 本文分享自华为云社区<为什么需要对jvm进行优化,jvm运行参数之标准参数& ...
- MySQL数据库技术实战
MySQL数据库技术实战 一,安装mysql 很早之前就知道mysql提供了一套数据库样本(github地址),用于测试你的应用程序和数据库服务器. 今天分享下使用过程并将他发布到了码云,以便于同 ...
- 关于integer数据对比的问题
先看案例 Integer c1 = 127; Integer c2 = 127; c1 == c2; //true Integer d1 = 128; Integer d2 = 128; d1 == ...
- Quartz.Net源码Example之Quartz.Examples.AspNetCore
Quartz.Examples.AspNetCore .NetCore的Web系统,后台主要执行多个触发器任务,前台展示所有触发器信息和正在执行的作业的相关信息,还可以通过访问health-UI来 ...
- 一次代码重构 JavaScript 图连通性判定
简介 说重构其实就是整理了代码,第一次自己手写写的很丑,然后看了书上写的,虽然和书上的思路不同但是整理后几乎一样漂亮 效果 整体代码如下 class Node { AdjNodes = new Set ...
- 【CTO变形记】有序定无序—为什么越努力,越无力
前言:我们用自己构建的认知结构来理解和映射这个世界,通过外界的反馈来调整现有的认知.但面对的现实越来越复杂,以及面对更多的未知且陌生的情况时,我们常常试图去"修整"接受到的信息 ...
- Nginx13 openresty使用lua-resty-template
1 简介 https://github.com/bungle/lua-resty-template 如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet ...
- .NET Core MongoDB的简单使用
一.创建测试库.测试表.添加测试数据 使用之前文章提到的MongoDB Compass用法分别添加数据库[myDb]和集合(表)[userinfos]信息, 参考链接为:MongoDB Compass ...
- Vim-Adventures 有趣的Vim小游戏
入门介绍 Vim-Adventures是一个让初学者练习如何使用 Vim 的小游戏.它一共有 TODO 个 关卡,每个关卡都对应不同的 Vim 练习.一进网页我们可以看到这个画面: 点进去后就自动来到 ...