统一配置中心概述

如果微服务架构中没有使用统一配置中心时,所存在的问题:

  • 配置文件分散在各个项目里,不方便维护
  • 配置内容安全与权限,实际开发中,开发人员是不知道线上环境的配置的
  • 更新配置后,项目需要重启

Spring Cloud Config就是我们通常意义上的配置中心。Spring Cloud Config-把应用原本放在本地文件的配置抽取出来放在中心服务器,本质是配置信息从本地迁移到云端。从而能够提供更好的管理、发布能力。
        Spring Cloud Config分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。

在SpringCloud中我们使用config组件来作为统一配置中心:

一、配置Config-Server服务器端

根据上图知道我们的项目拉取的配置都是由这个Config-Server服务提供的,所以我们这里先介绍Config-Server服务器应该怎么配置,先看pom.xml文件需要添加的核心依赖:

添加的核心依赖就是这个,如果IDE无法自动下载,请到本地仓库手动删除后再reimport让maven重新下载,接下来看看启动类:

接下来看看我们的application.yml文件中的核心配置,这里是关键

server:
port: 8762 spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/xulijun137/spring-cloud-config.git #配置文件所在仓库
###如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写。
#username: your_username # 登录账号
#password: your_password #登录密码
default-label: master #配置文件分支
search-paths: config1 #配置文件所在根目录

这里没有配置注册中心的地址,因为这里不是服务提供者,不需要注册到注册中心,从上面可以看到我们配置了Git仓库地址和登录账号、密码(如果是公共的仓库则不需要配置,私人仓库需要配置)、文件分支和文件的根目录,我的Git仓库如下:

这四个配置文件是放到文件夹config1下的,现在我们启动这个服务,其他的服务都可以暂时关闭不管,试着用浏览器获取这些配置文件里的信息:

需要说明:配置文件必须是xxx-xxx.yml或者xxx-xxx.properties的命名方式,扩展名SpringCloud目前只支持yml和properties这两种方式,这里我们用SpringCloudConfig方式获取我们远程仓库里的配置文件信息http://localhost:8762/ronne/dev

这里SpringCloudConfig提供了一套访问规则如下:

/{appication}/{profile}/[{label}]

/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

/{label}/{application}-{profile}.yml

补充说明如下:

再试着加入label访问一下地址http://localhost:8762/master/ronne-dev.yml,效果截图如下:

最后再看看这种访问方式http://localhost:8762/ronne/dev/master

这里我们的Config-Server服务器就配置成功了,接下来我们会建立一个消费者服务看看他是怎么从这个配置服务器上拉取远程仓库的信息并成功展示的

二、配置Config-Client消费端

先看我的pom.xml配置文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xu</groupId>
<artifactId>service-consumer-config-8769</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>service-consumer-config-8769</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.M3</spring-cloud.version>
</properties> <dependencies>
<!--Spring Cloud Config 客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.48</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> <repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories> </project>

在客户端我们需要新建一个bootstrap.yml或者bootstrap.properties文件,这个文件是优先于application.yml或者application.properties这个文件最先启动的,在这里我们填写我们需要获取的配置文件的信息:

spring:
cloud:
config:
uri: http://localhost:8762
name: ronne-dev #配置文件名,不要扩展名yml
profile: dev #在项目名称后面-dev的内容,简介。
label: master #当configserver的后端存储是Git时,默认是master

application.yml配置文件里配置应用的名称和端口:

server:
port: 8769
spring:
application:
name: config-client

看看我们的启动类有什么不同,其实没什么不同,什么其他的额外注解都没有添加:

最后我们看看我们的Controller中是什么写的以获取配置服务器拉取Git的配置:

package com.xu.serviceconsumer.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RefreshScope //开启更新功能
public class HelloController { @Value("${nickName}")
private String nickName; @RequestMapping("/hello")
public String from() {
return "Hello----------->\t" +this.nickName;
} }

我们再看看我们的提交到Git上的配置文件写的什么:

最后我们看看上面的Controller能否成功获取配置服务器拉取的配置信息,我们先启动config-server成功之后再启动这个config-client客户端,启动正常后就是如下:

我们打开浏览器在地址栏输入http://localhost:8081/hello得到结果是:

可以看到我们成功了,但是这里有个bug我一直没有搞清楚,就是我们的配置服务器的客户端配置的是8769,但是启动后居然是8081端口,看图:

后续等我找到原因了我再更新这篇文章,今天的课就先到这里了,谢谢大家!

===============================================================================

如果您觉得此文有帮助,可以打赏点钱给我支付宝或扫描二维码

SpringCloud学习之Config分布式配置中心(八)的更多相关文章

  1. SpringCloud学习笔记(九):SpringCloud Config 分布式配置中心

    概述 分布式系统面临的-配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...

  2. SpringCloud(6)分布式配置中心Spring Cloud Config

    1.Spring Cloud Config 简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组 ...

  3. java框架之SpringCloud(7)-Config分布式配置中心

    前言 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中标会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...

  4. SpringCloud与微服务Ⅹ --- SpringCloud Config分布式配置中心

    一.SpringCloud Config是什么 分布式系统面临的问题 --- 配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...

  5. Spring Cloud Config 分布式配置中心【Finchley 版】

    一. 介绍 1,为什么需要配置中心? 当服务部署的越来越多,规模越来越大,对应的机器数量也越来越庞大,靠人工来管理和维护服务的配置信息,变得困难,容易出错. 因此,需要一个能够动态注册和获取服务信息的 ...

  6. 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新

    前言 上一章节,简单介绍了分布式配置中心Spring Cloud Config的使用.同时,我们也遗漏了一些问题,比如如何配置实时生效,当服务端地址变更或者集群部署时,如何指定服务端地址?回想,在服务 ...

  7. SrpingCloud 之SrpingCloud config分布式配置中心实时刷新

    默认情况下是不能及时获取变更的配置文件信息 Spring Cloud分布式配置中心可以采用手动或者自动刷新 1.手动需要人工调用接口   监控中心 2.消息总线实时通知  springbus 动态刷新 ...

  8. SrpingCloud 之SrpingCloud config分布式配置中心

    Config架构 当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可 ...

  9. Springcloud 2.x 版本 分布式配置中心

    一.什么是分布式配置中心? 就是为微服务架构中的微服务提供集中化的外部配置支持,配置中心为各个微服务应用的所有环境提供了中心化的外部配置(可能比较难理解,想知道是什么意思就要知道为什么这么配置:这么配 ...

随机推荐

  1. 序列号导出到csv的实现

    //导出到csv public function exportCsvByIds($ids){ header("Content-type:text/html;charset=utf-8&quo ...

  2. mysq 数据库约束入门

  3. Google的搜索API的Delphi封装

    这个东西实现了已经有一段时间了,那个时候谷歌还没有退出中国内地呢!而现在呢,谷歌都退了有一些日子了!紧以此纪念一番! 话说谷歌API,我相信很多人应该都知道!不晓得在实际应用中,用的人多不多(我说的不 ...

  4. 用四种方法将两个AJAX改为同步

    用四种方法将两个AJAX改为同步 Promise.Generator函数.yield.async/await 相关 今有一题,题目为: 现有ajax1()和ajax2(),用于快速初始化CODE1和C ...

  5. 动手实验01-----vCenter 微软AD认证配置与用户授权

    环境说明: AD域->   centaline.net 阅读目录: 1. 配置与AD认证源 2.权限角色 1. 配置与AD认证源 登陆vCenter后,在 系统管理 -> 配置 -> ...

  6. node - 获取 token

     String(req.headers.authorization || '').split(' ').pop() 

  7. [转载]Jquery Chosen 插件动态生成option或重新绑定

    $(".chosen—select").find("option[value='1']").attr("selected", "s ...

  8. Mybatis中xml文件的时间段动态查询

  9. Python 加载mnist、cifar数据

    import tensorflow.examples.tutorials.mnist.input_data mnist = input_data.read_data_sets("MNIST_ ...

  10. 【转载】webdriver 自动化测试如何定位到动态变化ID的iframe框内

    大家知道,在自动化测试脚本编写过程中,如果页面上跳出一个iframe框时,我们是定位不到框内内容的,可以通过 driver.findElement(By.id("")); driv ...