[Spring Cloud] Spring Cloud Config配置中心

目录

一、什么是配置中心

配置中心工作流程

解决方案

二、Git仓库管理配置

三、搭建配置中心

四、Zuul集成ConfigClient

五、配置中心出错的问题解决


一、什么是配置中心 ?

        在分布式系统中,由于服务数量很多,为了方便服务配置文件统一管理我们需要用到置中心组件。在Spring Cloud中,分布式配置中心组件spring cloud config 它可以帮我们集中管理配置文件,修改配置无需重启服务 等,它支持配置文件放在配置服务的本地,也支持放在远程如Git仓库中集中管理。在spring cloud config 分为了服务端 config server和客户端config client 两个角色。

        配置中心工作流程:

        使用spring cloud config管理配置文件,我们需要把微服务的配置文件上传到Git仓库 , 然后搭建独立的ConfigServer服务,ConfigServer除了要从Git仓库拉取配置之外,还要注册到EurekaServer中,我们把ConfigServer本身也当做是一个微服务(当然ConfigServer可以脱离注册中心使用,但是如果客户端使用服务发现的方式指向配置中心就需要注册到注册中心了),至于ConfigClient这需要集成到具体的微服务中,如支付服务,订单服务等。其工作流程是,微服务通过ConfigClient向配置中心ConfigServer发起请求获取配置文件,配置中心从GIT仓库获取配置,然后再一路返回给微服务。

        需要注意是,EurekaServer的配置不能交给ConfigServer管理,因为必须要先启动EurekaServer才能启动ConfigServer,试问EurekaServer都没配置怎么启动?

 解决方案:

        根据上图我们知道,如果要实现配置文件统一管理,我们需要创建自己的远程仓库(当然也可以本地,或者其他仓库),我这里选择“码云”,然后将配置文件上传上去 ,然后我们需要搭建自己的配置中心服务ConfigServer,配置上码云的仓库地址和相关账号,最后我们需要去修改我们的微服务如:zuul网关,支付服务等集成ConfigClient 。

二、Git仓库管理配置

使用码云创建远程仓库:我们用码云作为git仓库 ,创建码云仓库

         这里以zuul网关服务做演示 。 创建zuul配置 在仓库中创建文件 ,我们先将zuul的配置文件复制到码云上 , 并负责好仓库地址以备用。

 注意复制好仓库地址,在克隆中取拷贝 , 待会搭建配置中心的时候会用到

三、搭建配置中心

搭建项目        搭建项目springcloud-config-server-1070 ,作为配置中心服务端,搭建好项目结构如下

springcloud-parent
pom.xml
	springcloud-config-server-1070	//配置中心服务
	springcloud-eureka-server-1010
	springcloud-order-server-1030
	springcloud-pay-server-1040
	springcloud-user-common
	springcloud-user-server-1020
	springcloud-zuul-server-1060	//网关服务

导入依赖

这里导入了Eureka Client基础依赖 ,和config server服务端依赖已经web依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--Eureka 客户端的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!-- 配置中心的依赖       -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
</dependencies>

开启配置中心

在主配置类通过打@EnableConfigServer标签开启配置中心

package cn.xmn.springboot;

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;

/**
 * 配置中心的启动类
 * @EnableConfigServer:开启配置中心
 */
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplication1070
{

    public static void main( String[] args )
    {
        SpringApplication.run(ConfigServerApplication1070.class);
    }
}

配置文件

        方式一:

ConfigServer的配置文件做两个事情,1.注册到EurekaServer,2.配置码云地址

server:
  port: 1070

# 注册到eureka
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1010/eureka/

  instance:
    instance-id: config-server:1070  # 实例id
    prefer-ip-address: true         # 开启ip的支持
spring:
  application:
    name: config-server  # 服务名
  cloud:
    config:
      server:
        git:
          uri: #配置远程仓库地址,去仓库中复制
          username: #仓库是私有的需要账号
          password: #自己的密码
          #search-paths: 路径 #如果配置文件不再仓库的根目录,需要配置查找路径

        方式二:

        通常情况下,我们会通过 srping.cloud.config.server.git.uri配置远程的Git仓库地址,(如上配置),配置中心服务从git仓库中拉取配置文件,而其它微服务再从配置中心服务获取配置 ,但有的时候因为网络故障等原因我们没办法连接到git仓库,那整个微服务的配置文件都可能会拉取失败,针对于这种情况我们可以把配置文件统一管理在本地磁盘中,如下配置:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
      	git:
          native:
            search-locations: classpath:config,file:D:/config   
            #从d:/config 和 classpath:config加载
         #配置远程仓库地址
         #uri: # 远程仓库地址
          #username: #仓库是私有的需要账号
          #password: 你的密码
          #search-paths: 路径 #如果配置文件不再仓库的根目录,需要配置查找路径    
  profiles:
    active: native  #基于本地的配置

测试配置中心:

浏览器访问:http://localhost:1070/application-zuul-dev.yml 你可以看到ConfigServer从Git仓库获取到的zuul的配置文件内容如下:

四、Zuul集成ConfigClient

        上一步骤我们已经可以通过ConfigServer从码云上获取到配置文件,我们的最终目的是能够让我们的微服务,zuul-server,order-server等都可以从ConfigServer拉取到配置文件,这里功能我们需要给微服务集成ConfigClient来实现。修改“springcloud-zuul-server-1060” zuul工程如下:

  1. 导入依赖
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-client</artifactId>
</dependency>

     2. 创建bootstrap.yml配置文件

        需要特别说明一下,虽然我们把zuul的配置文件搬到了码云上面,但是zuul本地依然需要一些基础的配置 ,在ConfigClient需要使用bootstrap.yml来作为基础配置文件,这是因为bootstrap.yml的优先级高于application.yml或者其他配置来源,我们得让微服务优先从码云上拉取配置文件后才能做其他的事情。

创建配置文件 resources/bootstrap.yml,添加如下内容:

#配置中心的地址
spring:
  cloud:
    config:
      uri: http://localhost:1070 #zuul要从配置中心拉取文件
      #你要拉取具体的哪个配置文件
      name: application-zuul  #配置文件名字   dev是环境
      profile: dev #环境  组成完整的文件名:application-zuul-dev.yml
      label: master #主分支

        提示:我们的Zuul需要从ConfigServer拉取配置文件,所以这里通过…config.uri指向配置中心地址,name属性值得是配置文件的名字 ,profile是环境名字 , name的值和profile的值合在一起组成完整的配置文件名,好处是可以修改profile的值来切换配置环境,label是git的分支,默认是master。

方式二:使用服务名方式发现配置中心

        上面的配置文件中通过uri指向配置中心地址获取配置文件,我们也可以通过服务发现的方式指向配置中心,该方式需要屏蔽掉 uri ,使用 discovery.service-id 来指定配置中心的服务名 ,使用discovery.enabled=true来开启服务发现。 需要注意的是:如果使用服务发现的方式来指向配置中心,那么EurekaServer的注册地址需要在本地配置文件中指定。具体配置如下:

spring:
  cloud:
    config:
      #uri: http://localhost:1030
      name: application-zuul
      profile: dev
      label: master
      discovery:
        service-id: config-server #配置中心服务名
        enabled: true #使用服务名访问配置中心
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:1010/eureka/,http://peer2:1011/eureka/,http://peer3:1012/eureka/ 
      #注册中心地址,需要从注册中心使用服务名发现配置中心

        提示:如果ConfigServer配置中心做了集群,那么建议配置中心客户端使用服务名的方式发现配置中心

 3. 测试zuul

        启动zuul,观察启动的端口如果是1060说明已经从Git仓库拉取到了配置文件了,如果启动的端口是8080,说明配置文件拉取失败,这个时候需要检查你的集成步骤。

五、配置中心出错的问题解决

如果发现你的客户端微服务启动不成功,有哪些问题造成:

1.配置文件拉取不到

2.配置文件拉取到了,但是配置内容有错

3.项目其他地方错误 - 不是配置文件的问题

如何判断是配置拉取不到?

观察启动的端口是不是以8080启动的,如果是,一定是配置文件拉取不到(除非你真的就配置的是8080)排查方式:

检查配置中心服务端是否有问题

  • 检查ConfigServer启动没有,端口,地址对不对

  • 打开浏览器访问一下配置文件看能不能拉取到配置文件,如下:

    http://localhost:1070/application-zuul-dev.yml

    如果配置中心能获取到配置文件,那么错误一定在ConfigClient ,或者是内容有问题

  • 如果配置中心拉取不到配置,有两种情况,1是git地址配置错误,2.内容编码错误,格式错误导致拉取不到

  • 检查配置中心的git地址,用户名,密码是否有问题

  • 打开码云确认一下内容是否有问题,格式,编码

如果服务端没问题检查客户端

  • 对比你的 spring.cloud.config.name 和 profile是否和码云上的配置文件一样,以及 label分支是否一致

  • 检查你的 spring.cloud.config.uri 写对了没有,是不是你的配置中心服务的地址

  • 检查你的依赖:spring-cloud-config-client导入没有,导入成功么有,按ctrl去点击一下你的依赖(或者删除本地厂库中的依赖重新下载)

配置文件拉取到也报错

如果配置文件拉取到了,服务启动的端口应该就是你配置文件的端口,但是如果启动日志还是有异常,那应该不是配置文件拉取不到的问题了 ,可以把配文件配置成本地方式来排除错误:

  • 注释掉 spring-cloud-config-client包

  • 恢复本地配置文件

如果配置文件改成本地配置还是启动不能,那就是其他问题,可能是配置文件内容的问题,也可能是代码问题,根据错误日志排查。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值