一、SpringCloud Config 基本配置中的问题

在上一章节《SpringCloud config 配置中心介绍与基本配置使用》中我们现实了配置中心的配置集中管理、调用微服务应用接口动态刷新微服务应用配置信息。但是如果我们微服务应用比较多的情况下,当我们修改了多个应用的配置时,则需要我们对每个应用进行请求刷新配置,还是很不方便的,所以这时我们如果可以实现刷新一次,全部应用都配置可以更新生效的话,则会方便很多。另外在上一个章节项目中我们在生产者微服务配置信息中配置 configserver 应用信息时 使用的为固定ip端口信息。如果改节点服务器挂掉,则会直接影响配置该应用的微服务获取配置信息。那么我们改如何解决上面两个问题呢,本章下面则为大家介绍如何对之前的基本配置项目进行升级改造。

二、高可用集群的搭建

配置中心服务端的集群高可用配置思路为,我们将注册中心服务端也注册到Eureka注册中心中。在微服务应用中通过修改其ip端口为服务名称的方式来实现配置中心服务端的高可用。挂掉一台集群,还有其他服务端可以提供服务。改造前后系统结构如下:

1,服务端改造步骤

  1. 添加Eureka依赖
  2. 修改服务端配置文件,注册Eureka
  3. 复制一个子mode工程,进行集群启动,修改config server端口

步骤一、添加Eureka依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>SpringCloud</artifactId><groupId>com.xiaohui.springCloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>config_server</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><!--高可用改造 --><!-- Eureka 客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies></project>

步骤二、修改服务端配置文件,注册Eureka

server:port: 9999
spring:application:name: config-server #服务名称cloud:config:server:git:uri: http://admin@127.0.0.1:10001/r/SpringCloud/config_server.gitusername: adminpassword: admin#接入到eureka 注册中心上
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://eureka1.com:9000/eureka/instance:prefer-ip-address: true #使用ip进行注册instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务ID

步骤三、复制一个工程进行重命名,修改其maven中<artifactId>config_server2</artifactId>,在父工程中添加其子模块。或者重新创建一个一模一样的也可以。并修改其配置文件中端口。

2,生产者微服务config客户端改造:

主需要修改配置文件bootstrap.yml即可。

spring:cloud:config:name: application #对应git上文件名的前部分profile: prd #git 上配置文件名的后部分label: master #git分支#uri: http://127.0.0.1:9999#通过注册中心获取配置中心 配置discovery:enabled: true # 开启服务发现service-id: config-server #配置中心的服务名称
# 由于不使用直接从固定ip的配置中心节点拿配置,通过eureka获取,则此处需要吧eureka的配置从配置中心中进行提前
eureka:client:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://eureka1.com:9000/eureka/instance:prefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port}
#开启动态刷新的请求路径端点
management:endpoints:web:exposure:include: refresh

上面中主要 注释了spring.cloud.config.uri 部分,并使用了spring.cloud.config.discovery 来进行配置其获取配置的服务为从注册中心获取,服务名称为 config-server。

测试:启动Eureka,在分别启动两个配置中心,在启动生产者工程。访问测试地址:http://127.0.0.1:8002/payment/get/name 。可以正常访问。当我们停掉一台config服务端,修改配置,重新刷新生产者工程refresh地址,仍可以更新配置信息。

三、整合消息总线BUS实现配置中心刷新,驱动所有微服务配置获取刷新

解决配置修改需要调用每个微服务接口,我们改造的思路为对配置中心服务端进行发送post请求,然后通过消息总线方式通知每个微服务。微服务在调用配置中心服务端接口获取并更新应用配置和本地缓存。

1,服务端改造

主要步骤:

  1. 添加消息总线依赖、以及rabbitmq相关依赖
  2. 修改配置文件 配置刷新配置请求地址、rabbitmq 信息

服务端添加依赖:

<!-- 消息总线 实现刷新配置中心通知所有微服务应用 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>

配置文件添加配置信息:

spring:  rabbitmq:addresses: 192.168.17.132username: guestpassword: guest
#通过加入消息总线bus 实现配置中心一处刷新来驱动所有微服务进行获取更新配置
management:endpoints:web:exposure:include: bus-refresh

2,客户端改造

主要步骤:

  1. 添加依赖
  2. 修改配置文件

添加消息总线BUS以及rabbitmq 相关依赖

<!-- 消息总线 实现刷新配置中心通知所有微服务应用 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>

修改配置文件,删除开启动态刷新的请求路径端点部分。

#开启动态刷新的请求路径端点
management:endpoints:web:exposure:include: refresh

重启Eureka、config_server、product_service 工程,我们修改配置文件中name值,访问之前链接http://127.0.0.1:8002/payment/get/name。然后使用postman 给config_server服务端发送请求更新配置地址127.0.0.1:9999/actuator/bus-refresh。稍等几秒后我们访问之前链接http://127.0.0.1:8002/payment/get/name。可以看到提交的配置记录已经生效。

SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新相关推荐

  1. Apollo注册到自己的Eureka注册中心+配置中心集群

    ##重要提示:在任何步骤开始之前,谨记下面的东西## 在对apollo-master这个文件进行处理的时候,要找到文件夹scripts下的文件build.bat,苹果用户请找到build.sh,并且在 ...

  2. SpringCloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus

    在本教程第三讲Spring Cloud 入门教程(三): 配置自动刷新中,通过POST方式向客户端发送/refresh请求, 可以让客户端获取到配置的最新变化.但试想一下, 在分布式系统中,如果存在很 ...

  3. springCloud - 第8篇 - 配置文件管理中心 - 集群模式(负载匀衡)使用

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 当微服务系统中 应用服务有很多时(serviceA .serviceB ...),会都从同一个配置中 ...

  4. iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置

    技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...

  5. 容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet

    容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet 1 Before you begin 2 重新配置集群活动节点上的 Kubelet 2.1 基本工作流程概览 2.2 ...

  6. 二进制形式配置k8s集群(二)-生成证书

    参考https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/docs/04-certificate-authori ...

  7. GitHub 9K Star!Apollo作者手把手教你微服务配置中心之道

    作者 | 宋顺 编辑 | 小智 随着微服务的流行,应用和机器数量急剧增长,程序配置也愈加繁杂:各种功能的开关.参数的配置.服务器的地址等等.在这样的大环境下,传统的通过配置文件.数据库等方式已经越来越 ...

  8. 系列学习分布式任务调度 XXL-JOB 之第 2 篇 —— 调度中心集群

    调度中心集群 调度中心支持集群部署,提升调度系统容灾和可用性. 调度中心集群部署时,几点要求和建议: DB配置保持一致: 集群机器时钟保持一致(单机集群忽视): 建议:推荐通过 nginx 为调度中心 ...

  9. 分布式解决方案-全面解密分布式任务调度平台-XXLJob调度中心集群

    调度中心集群 调度中心支持集群部署,提升调度系统容灾和可用性. 调度中心集群部署时,几点要求和建议: DB配置保持一致: 登陆账号配置保持一致: 群机器时钟保持一致(单机集群忽视): 建议:推荐通过n ...

最新文章

  1. POI如何使用已有Excel作为模板二三事
  2. 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
  3. python gpiozero,树莓派远程GPIO调试(Python + pigpio版)
  4. 按下enter键禁止页面刷新
  5. Python实现字符串与指定密钥循环异或加解密
  6. 0x00007FFEBAD050D8 处(位于 first.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000000DD73CE
  7. 语音识别技术的研究难点以及未来发展方向
  8. html设计一个图片墙,html5 绘制类似墙型的背景
  9. Scala中的“=”和“-”
  10. Unity Qualcomm 3D音频插件
  11. SSM期末复习题(仅供参考)
  12. PMP 第10章 项目沟通管理
  13. 好好说话之unlink
  14. 发现fir.im的bug,可以获取fir.im用户的任何软件id和用户token。
  15. 第一台超高速巨型电子计算机,1997年,( )巨型机的研制成功,使我国在这个领域跨入了世界先进行列。...
  16. 密码学—安全归约问题(Reduction)
  17. 请教:关于爬取歌词的一点疑惑
  18. 算法导论中LCS的C++实现程序
  19. 抖音开放平台, 企业号私信订阅服务 java(公开的)
  20. 2015年二本投档线

热门文章

  1. 分别采用深度优先遍历和广度优先遍历判断是否存在由vi到vj的路径,图用邻接表存储
  2. Linux shell脚本调试
  3. import time python_似乎不能在Python的同一脚本中使用import time和import datetime
  4. C# 关闭当前窗口打开另一窗口
  5. 提高github访问速度(深入研究底层网络通信、域名解析等原理)
  6. 职高有计算机专业前途怎么样,职高有哪些专业前途好有发展前景
  7. Linux Shell文本处理工具集锦
  8. 手动爬虫之京东笔记本栏(ptyhon3)
  9. 【POJ1083】 Moving Tables (并行的搬运)
  10. iOS开发工程师笔试题