SpringCloud服务配置:Spring Config

1. Spring Config分布式配置中心

微服务架构意味着将会产生越来越多的单体服务,每个业务模块都被拆成了一个微服务模块,每个微服务模块中,都有各自的配置文件,随着模块的增多,配置文件越来越多,因此,需要有一个集中式的、动态配置的管理来解决这个问题。于是Spring Cloud提供了Config类解决这个问题,它为微服务中的模块提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置。

微服务面临的问题

可以看到,每个微服务都需要一个配置文件,并且,如果有几个微服务都需要连接数据库
		那么就需要配4次数据库相关配置,并且当数据库发生改动,那么需要同时修改4个微服务的配置文件才可以

所以有了springconfig配置中心

(1)Spring Cloud Config分为服务端客户端两部分。

服务端称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。

客户端通过指定配置中心来管理应用资源以及与业务相关的配置内容,在启动的时候,从配置中心(服务端Config)读取加载配置信息,配置服务器默认采用git来存储配置信息,有助于对环境配置进行版本管理,可以通过git客户端工具方便管理和访问配置内容。

(2)Config的功能:

  • 集中管理配置文件
  • 不同环境可以使用不同的配置,动态配置更新
  • 运行期间,动态调整配置,不再需要在每个服务部署的机器上修改配置文件,服务回向配置中心统一拉取配置信息
  • 当配置发生变化,服务不需要重启即可感知到配置的变化,并应用新的配置
  • 将配置信息以REST接口形式暴露

官方文档:https://cloud.spring.io/spring-cloud-config/reference/html/
在这里插入图片描述
在这里插入图片描述

2.Config服务端和客户端配置与测试

2.1 创建Config服务端3344(分布式配置中心)

3344就是Config Server,它是微服务的配置中心,是连接外部支持(git)和内层各个微服务的通道,当外部配置变化时,3344可以同步更新,同时各个微服务客户端可以从配置中心Config Server中获取修改的更新值。

1.使用github作为配置中心的仓库

在这里插入图片描述

2. 新建config服务端模块3344

(1)pom.xml的主要依赖

添加cloud-config-center-3344模块,修改pom.xml,添加spring-cloud-config-server坐标。

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId><!--Config服务端--->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>

(2)3344yaml配置文件

server:
  port: 3344   #端口号

spring:
  application:
    name: cloud-config-center  #注册进Eureka 服务器的微服务名
  cloud:
    config:
      server:
        git:
          uri: https://github.com/yaxiy/springcloud-config.git  #GitHub远程仓库地址
          # 搜索目录
          search-paths:
            - springcloud-config
      #读取分支
      label: master

#服务注册到eureka
eureka:
  client:
    service-url:
      defaultZone:  http://localhost:7001/eureka

(3)主启动类

使用注解**@EnableConfigServer**激活Config配置中心。

package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigCenterMain3344 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigCenterMain3344 .class,args);
    }
}

(4)Windows修改hosts文件,重命名IP地址(之后直接用localhost:3344访问即可)
在这里插入图片描述
(5)测试Config服务端配置中心

测试,3344是否可以从github上获取配置

启动3344 (要先启动eureka7001和7002),再启动3344

这里注意之前的github上的库一定要设置成public,否则私有的访问不了
在这里插入图片描述
在这里插入图片描述
它实际上就是,读取到配置文件application.yml中的GitHub的地址,然后拼接上/master/config-dev.yml
在这里插入图片描述

3. 配置文件的请求地址规则(3种方式)

(1)方式1:IP地址(主机地址):端口号/label标签(master/dev…自定义)/application(config,可以自定义)-profile(文件名dev…,自定义)
在这里插入图片描述
(2)方式2:就是省略了label标签,因为yaml文件中已配置了,所以yaml文件配置label标签后,请求路径中可以写也可以不写
在这里插入图片描述
这里默认会读取master分支,因为我们配置文件中配置了
在这里插入图片描述
(3)方式3:就是和方式1逆序,同时省略-
在这里插入图片描述
注意,这个方式读取到的配置是json格式

所有规则:
在这里插入图片描述

2.2 创建Config客户端3355(配置中心的客户端)

该微服端可以从配置中心3344获取更新值(当配置修改时需要同步更新)

2.1 创建config客户端微服务项目

新建cloud-config-client-3355模块,修改pom.xml,添加spring-cloud-starter-config坐标。

(1)3355 微服务Config客户端pom.xml

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

(2)yaml配置文件

注意这个配置文件就不是application.ym 而是bootstrap.yml

这个配置文件的作用是,先到3344Config配置中心加载配置然后加载到自己的application.yml中
在这里插入图片描述
在这里插入图片描述
(3)主启动类

微服务客户端不需要加注解@EnableConfigServer
在这里插入图片描述
(4)controller类

就是上面提到的,以rest风格将配置对外暴露
在这里插入图片描述
在这里插入图片描述

如果客户端运行正常,就会读取到github上配置文件的,config.info下的配置

(5)测试

启动3344,3355

​ 访问3355的 /configInfo

这个结果就是通过3344服务端配置中心间接从git仓库获取的
在这里插入图片描述
(6)客户端产生的问题

上面3355确实获取到了配置文件,但是如果此时配置文件修改了,3355是获取不到的
3344可以实时获取到最新配置文件,
但是3355却获取不到,除非重启服务

2.3 实现动态刷新(3355不需要重启服务)

1,修改3355,添加一个pom依赖:

在这里插入图片描述

2. 3355的bootstrap.yml配置中添加监控

在这里插入图片描述

3,修改controller,添加注解@RefreshScope刷新

在这里插入图片描述

4,此时重启服务

此时3355客户端还不可以动态获取

因为此时,还需要外部发送post请求通知3355

curl -X POST "http://localhost:3355/actuator/refresh

在这里插入图片描述
此时在刷新3355,发现可以获取到最新的配置文件了,这就实现了动态获取配置文件,因为3355并没有重启

具体流程就是:

​ 我们启动好服务后

​ 运维人员,修改了配置文件,然后发送一个post请求通知3355

​ 3355就可以获取最新配置文件

问题:

​ 如果有多个客户端怎么办(3355,3356,3357…)

​ 虽然可以使用shell脚本,循环刷新

​ 但是,可不可以使用广播,一次通知??

​ 这些springconfig做不到,需要使用springcloud Bus消息总线

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值