在实现springcloud的配置中心后,我们需要考虑的就是动态刷新配置。如果考虑只有一个客户端,我们可以在配置文件发生push操作的时候添加webhook,使用webhook发送刷新的post请求到客户端。但当客户端很多的情况,就需要请求多个客户端,这是不现实的。所以我们就想到直接刷新配置中心,直接由配置中心通知各个客户端获取最新的配置。下面就记录一下今天搞了一天的使用springcloud bus整合kafka(或者rabbitmq)实现动态刷新,本地自己搞的玩的,所以是windows环境哈,linux大同小异。因为之前项目就用到kafka,新项目启动项直接拿过来用,所以就没使用rabbitmq,想用rabbitmq的同学可以另行百度哈。

一、因为kafka强依赖zookeeper,所以首先要安装zookeeper和kafka

 安装zookeeper

  1.下载压缩包https://www.apache.org/dyn/closer.cgi/zookeeper并解压到D盘,我下载的是最新的稳定版zookeeper-3.4.12.tar.gz

  2.修改环境变量,添加变量ZOOKEEPER_HOME变量值D:\zookeeper-3.4.12  修改变量Path变量值添加%ZOOKEEPER_HOME%\bin;

  3.在D:\zookeeper-3.4.12下新建文件夹data和log,然后将D:\zookeeper-3.4.12\conf下的zoo_sample.cfg复制一份到当前目录命名为zoo.cfg并添加

    dataDir=D:/zookeeper-3.4.12/data
    dataLogDir=D:/zookeeper-3.4.12/log

  4.用管理员身份打开cmd窗口,输入zkServer,即启动zk服务

 安装kafka

  1.下载压缩包http://kafka.apache.org/downloads任意下载二进制文件并解压到D盘,我下载的是kafka_2.12-1.1.0。

  2.在kafka目录下新建文件夹kafka_logs,然后打开config目录下的server.properties配置文件,修改log.dirs=D:/kafka_2.12-1.1.0/kafka_logs。

  (有的文章里有说要执行bin\windows\zookeeper-server-start.bat config\zookeeper.properties,这是在第一步中没有cmd运行zkServer,如果有运行,这里就不需要这一步了)

  3.打开cmd窗口在kafka目录下输入bin\windows\kafka-server-start.bat config\server.properties启动kafka。

  4.再打开一个cmd窗口(第三个了),在kafka目录下输入bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testNew创建topic,创建成功是这个样子:

    

  5.继续输入bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic testNew创建生产者

  6.再打开一个cmd窗口(第四个额),再kafka目录下输入bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic testNew --from-beginning创建消费者

  7.测试,在生产者输入,在消费者可以显示

    例如:生产者输入welcome to kafka

        

       消费者即可收到消息:

        

二、更改config-server项目和eureka-client项目(可以是config-client,一样,我只是把eureka-client改造成了config-client)

config-server改造:

  1.pom添加依赖:   

1        <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-actuator</artifactId>
4         </dependency>
5         <!-- kafka依赖 -->
6         <dependency>
7             <groupId>org.springframework.cloud</groupId>
8             <artifactId>spring-cloud-starter-bus-kafka</artifactId>
9         </dependency>

  2.application.properties配置文件添加:

1 spring.cloud.stream.kafka.binder.zk-nodes=localhost:2181
2 spring.cloud.stream.kafka.binder.brokers=localhost:90923 management.security.enabled=false

eureka-client改造:
  1.pom添加依赖:

1        <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-actuator</artifactId>
4         </dependency>
5         <!-- kafka依赖 -->
6         <dependency>
7             <groupId>org.springframework.cloud</groupId>
8             <artifactId>spring-cloud-starter-bus-kafka</artifactId>
9         </dependency>

  2.获取配置的controller上添加注解:@RefreshScope

三、重启config-server和eureka-client项目,然后修改配置文件内容后,用postman调用config-server的bus/refresh请求:配置中心ip:端口/bus/refresh。这个时候可以发现eureka-client使用的配置是最新的。

注:刷新过程总结下

  1.config-server接收到bus/refresh请求后会下载最新配置并通知消息总线bus

  2.消息总线通知各个客户端配置有更新

  3.各个客户端会重新请求config-server获取最新配置

  

  

  

 

  

转载于:https://www.cnblogs.com/ryan304/p/9134783.html

springcloud配置动态更新相关推荐

  1. Spring Boot配置动态更新

    解释 配置动态更新在本文中指当更改应用的配置项后,无需要重启应用新配置即可生效. 概述 配置动态更新是应用的一种通用性需求,很实现 的方式有很多种,如监听配置文件内容变化.使用配置中心等等.Sprin ...

  2. Spark/Flink广播实现作业配置动态更新

    点击上方"zhisheng",选择"设为星标" 后台回复"ffa"可以查看 Flink 资料 前言 在实时计算作业中,往往需要动态改变一些配 ...

  3. zookeeper 网关_多图,5000 字分享,API 网关如何实现配置动态更新?

    前言 网关是流量请求的入口,在微服务架构中承担了非常重要的角色,网关高可用的重要性不言而喻.在使用网关的过程中,为了满足业务诉求,经常需要变更配置,比如流控规则.路由规则等等.因此,网关动态配置是保障 ...

  4. ribbon 配置 动态更新_Netflix开源工具:在SpringBoot实现动态路由

    前言 假设你有一个服务A,要调用服务B(有三个实例,B1.B2.B3),如何只调用其中的B1和B2,屏蔽掉B3?实际上解决方法大致分为两类. 一种是外部路由,就是通过网关等组件,在请求链路上进行路由选 ...

  5. Flink从入门到精通100篇(十七)-Spark/Flink广播如何实现作业配置动态更新?

    前言 在实时计算作业中,往往需要动态改变一些配置,举几个栗子: 实时日志ETL服务,需要在日志的格式.字段发生变化时保证正常解析: 实时NLP服务,需要及时识别新添加的领域词与停用词: 实时风控服务, ...

  6. ribbon 配置 动态更新_SpringCloud实战三-Ribbon

    负载均衡 是一种计算机技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最优化资源使用.最大化吞吐率.最小化响应时间.同时避免过载的目的. 传统项目,都使用 ...

  7. Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新

    DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...

  8. Nacos支持配置的动态更新

    // 注入配置文件上下文 @Autowired private ConfigurableApplicationContext applicationContext;@GetMapping(value ...

  9. 通过阿里云K8S Ingress Controller实现路由配置的动态更新

    简介 在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量.我们知道,Nginx Ingress Controller是Kubernet ...

最新文章

  1. AI科学家王怀清:机器视觉识别领域 或将出现AI独角兽
  2. 动态规划-重叠区间2020.3.30
  3. UVA - 10118 Free Candies 记忆化搜索经典
  4. windows10在线升级失败后的一些补救措施
  5. 【译】《Understanding ECMAScript6》- 第三章-Object
  6. java for foreach 效率_Java中LinkedList的fori和foreach效率比较
  7. Django开发微信公众平台
  8. 【ReflectDllInjection】 反射型DLL注入
  9. 加密的m3u8、ts文件合并
  10. python字符串怎么加绝对值_每日一练 | Python绝对值有哪些实例?
  11. Firemonkey下使用StyleBook的一些经验
  12. Keil C语言 宏重复定义 问题分析与处理
  13. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
  14. 【杂谈】当你在凝视深渊的时候,深渊也正在凝视着你
  15. 小鲲Python嘎嘎炫~day1
  16. Windows下运行XServer,XServer和XClient
  17. 苹果基带坏了怎么办_苹果手机信号不好?简单的设置一下这4个开关,改善网速你会吗?...
  18. IP地址、URL及域名的相关概念
  19. matlab 给矩阵加一行或加一列
  20. 不一样的码农,UFI

热门文章

  1. python绘制正方形、利用turlr_《像计算机科学家一样思考Python》学习笔记(四)...
  2. 在JAVA中把JSON数据格式化输出到控制台
  3. Java Integer.compareTo()比较大小
  4. SpringBoot 多种定时任务实现方式
  5. java中Map遍历的四种方法
  6. 韩国各大银行纷纷开始引进区块链技术
  7. 【386天】跃迁之路——程序员高效学习方法论探索系列(实验阶段143-2018.02.26)...
  8. 12306网站将新增微信通知方式
  9. CentOS 6.5 install redis 3.0.7
  10. Centos6.X安装smokeping