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

一、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.git
          username: admin
          password: admin

#接入到eureka 注册中心上
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-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: true
    register-with-eureka: true
    service-url:
      defaultZone: http://eureka1.com:9000/eureka/
  instance:
    prefer-ip-address: true
    instance-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.132
    username: guest
    password: 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。可以看到提交的配置记录已经生效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值