欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springcloud - spring cloud config(配置中心)

程序员文章站 2022-07-03 18:06:11
...

1.理解配置中心

1.1.什么是配置中心

  • 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置文件放在配置服务的本地,也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server。

1.2.配置中心工作流程

  • 我们需要把微服务的配置文件上传到Git仓库 , 然后搭建独立的ConfigServer服务,ConfigServer除了要从Git仓库拉取配置之外,还要注册到EurekaServer中,因为ConfigServer也是一个微服务,至于ConfigClient这需要集成到具体的微服务中,如支付服务,订单服务等。其工作流程是,微服务向配中心获取配置,配置中心从GIT仓库获取配置,然后再一路返回给微服务。
  • 需要注意是,EurekaServer的配置不能交给ConfigServer管理,因为必须要先启动EurekaServer才能启动ConfigServer,试问EurekaServer都没配置怎么启动?

springcloud - spring cloud config(配置中心)

2.Git仓库管理配置

2.1.使用码云创建远程仓库

  • 我们用码云作为git仓库 ,创建码云仓库
    springcloud - spring cloud config(配置中心)
  • 创建zuul配置 在仓库中创建文件 ,我们先将zuul的配置文件赋值到码云上
    springcloud - spring cloud config(配置中心)
  • 注意复制好仓库地址,在克隆中取拷贝 , 待会搭建配置中心的时候会用到

3.搭建配置中心

3.1.搭建项目(springcloud_config_server_1060)

3.2.导入依赖

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

3.3.开启配置中心

/**
 * @EnableEurekaServer:开启eurekaServer服务端
 * @EnableCircuitBreaker:开启Hystrix断路器注解
 */
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplicationConfig {

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

3.4.配置文件

  • ConfigServer的配置文件做两个事情,1.注册到EurekaServer,2.配置码云地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:1010/eureka/,http://peer2:1011/eureka/,http://peer3:1012/eureka/ #注册中心地址
  instance:
    prefer-ip-address: true #使用ip地址注册
    instance-id: config-server  #指定服务的id
server:
  port: 1060
spring:
  application:
    name: config-server:1060
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/wang_ha_ha_1/spring-cloud.git #配置远程仓库地址
          username: 注册的账号	#仓库是私有的需要账号
          password: 注册的密码


3.5.测试配置中心

  • 浏览器访问:http://localhost:1060/application-zuul-dev.yml 你可以看到ConfigServer从Git仓库获取到的zuul的配置文件内容如下:
    springcloud - spring cloud config(配置中心)

4.Zuul集成ConfigClient

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

4.1.导入依赖

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-client</artifactId>
</dependency>

4.2.创建bootstrap.yml配置文件

  • 需要特别说明一下,虽然我们把zuul的配置文件搬到了码云上面,但是zuul本地依然需要一些基础的配置 ,在ConfigClient需要使用bootstrap.yml来作为基础配置文件,这是因为bootstrap.yml的优先级高于application.yml或者其他配置来源,我们得让微服务优先从码云上拉取配置文件后才能做其他的事情。
  • 创建配置文件 resources/bootstrap.yml,添加如下内容
#配置中心的地址
spring:
  cloud:
    config:
      uri: http://localhost:1060 #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。

4.配置中心出错的问题解决

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

1.配置文件拉取不到

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

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

4.1.配置拉取不到

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

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

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

  • 打开浏览器访问一下配置文件看能不能拉取到配置文件,如下:
    http://localhost:1060/application-zuul-dev.yml
    如果配置中心能获取到配置文件,那么错误一定在ConfigClient ,或者是内容有问题

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

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

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

检查配置中心客户端-就是的拉取配置的微服务

  • 对比你的 spring.cloud.config.name 和 profile是否和码云上的配置文件一样,以及 label分支是否一致
  • 检查你的 spring.cloud.config.uri 写对了没有,是不是你的配置中心服务的地址
  • 检查你的依赖:spring-cloud-config-client导入没有,导入成功么有,按ctrl去点击一下你的依赖(或者删除本地厂库中的依赖重新下载)

4.2.配置文件拉取到了

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

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

  • 恢复本地配置文件

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