美文网首页
Spring Cloud系列--Spring Cloud Con

Spring Cloud系列--Spring Cloud Con

作者: NealLemon | 来源:发表于2019-05-14 22:15 被阅读0次

简介

Spring Cloud Config provides server and client-side support for externalized configuration in a distributed system. With the Config Server you have a central place to manage external properties for applications across all environments.

Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。

Spring Cloud Config 默认采用Git来存储配置信息,也同样支持其他存储方式比如 SVN,本地化文件系统等。接下来让我们使用Git存储来做分布式的配置文件管理。

构建配置中心

一.服务架构流程

flow.png

我们可以从图中看到,在向注册中心注册时我们的客户端需要从config-server中获取外部化配置,然后客户就可以随意向客户端发送请求了。

二.搭建项目

在这里我们使用IDEA默认提供的创建方式来创建配置中心。打开IDEA, File-> New Project->Spring Initializr

点击next。

p1.png p2.png

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 http://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.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>my-config-server</groupId>
    <artifactId>config-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>config-server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>

</project>

三.Git仓库配置

相信各位程序员大大们对github都再熟悉不过了,我就不说如何配置和创建了。这里我在我的github中创建了一个名为consumer-test.properties文件。内容很简单。

hello=hello world come from neal github
我们需要做的就是,使用客户端从Spring Cloud Config 服务中获取到该外部化配置。

四.整合配置

1.配置文件application.properties

我们现在来将config-server和 Git仓库匹配上吧。

在config-server中,重要的配置都在application.properties

# 配置 Spring Cloud Config Server应用名
spring.application.name=config-server

#端口
server.port = 7070
#注册中心地址
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/


#配置config
#git 仓库位置
spring.cloud.config.server.git.uri=https://github.com/NealLemon/myconfig
#git 搜索的相对路径
spring.cloud.config.server.git.search-paths=test

#git 仓库用户名以及密码
spring.cloud.config.server.git.username=你的github账号
spring.cloud.config.server.git.password=你的github密码

我们可以看到前三个配置再熟悉不过了,这里就不多解释了。我们来看一下之后的配置。

  • spring.cloud.config.server.git.uri:配置Git仓库的位置,直接从浏览器地址栏中复制即可。
git1.png
  • spring.cloud.config.server.git.search-paths:搜索配置文件的相对路径。这里就是上图中的test文件夹
  • spring.cloud.config.server.git.username/password:Git仓库的帐号密码,这里可配可不配。

2.引导类ConfigServerApplication

//注册发现客户端
@EnableEurekaClient
//开启spring cloud config 自动装配
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

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

}

五.启动

首先在启动Config-Server之前,我们需要一个注册中心,也就是我们之前文章所用的spring-cloud-test-register

如果不知道这个怎么搭建 ,可以参照之前的文章。

首先启动 注册中心(spring-cloud-test-register) -> 配置中心(config-server)

我们来看一下 注册中心,查看我们的配置中心是否注册到了 注册中心中。

p3.png

我们可以看到,已经注册进来了,我们接着来看一下我们外部化配置是否读取到了。在这里我们有一个规则,这个规则是我看 翟永超大神的《Spring Cloud 微服务实战》中摘录的

/{application}/{profile}/[{label}]

/{application}-{profile}.yml

/{application}-{profile}.properties

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

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

这里的label 指的是对应Git上的不同的分支。默认为master。其余的可如图

p4.png

在这里我们也可以使用POSTMAN来查看配置的内容。

p5.png

到这里我们的配置中心已经搞定了。接下来让我们来搞一下客户端。

客户端配置(ribbon-consumer)

这里的客户端,我就使用之前创建的客户端了。很简单,如何搭建,可以回去看一下Spring Cloud系列--简单实现Ribbon负载均衡

1.配置文件

bootstrap.properties

## 用户 Ribbon 客户端应用
spring.application.name=ribbon-consumer
server.port=9000

## 配置客户端应用关联的应用
spring.cloud.config.name = consumer
## 关联 profile
spring.cloud.config.profile = test
## 关联 label
spring.cloud.config.label = master
## 激活 Config Server 服务发现
spring.cloud.config.discovery.enabled = true
## Config Server 服务器应用名称
spring.cloud.config.discovery.serviceId = config-server
## Spring Cloud Eureka 客户端 注册到 Eureka 服务器
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/

这里我们把之前application.properties中的内容全部删除。之所以配置bootstrap.properties这个是基于springboot的外部化配置加载顺序。具体的加载顺序可以查看相关文章,我也有过大概提过,是在这篇文章里

Springboot--外部化配置(一)。我简单的debugger了一下,大体的加载顺序如下图。

p6.png

在配置中我们需要关注这么几个配置就可以了。其他的看注释就可以理解了。

  • spring.cloud.config.discovery.enabled:激活 Config Server服务发现,这里默认是关闭的,如果不开启的话,无法从注册中心获取到相关配置信息。
  • spring.cloud.config.discovery.serviceId:对应配置中心的服务ID 这里就是 config-server。我们看翟永超大神的书的时候,配置的时候并没有这个,而是直接把uri 配置上了。两种方式,大家选熟悉的来。

配置文件部分就完事了。

2.添加依赖

pom.xml 中添加如下依赖

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

3.添加测试方法

这里新建了一个controller,就不多做解释了 大家都能看懂

/**
 以这种方式注释的Bean可以在运行时刷新,
 并且使用它们的任何组件将在下一个方法调用上获得一个新实例,
 完全初始化所有依赖项。
 */
@RefreshScope
@RestController
public class ConsumerConfigController {

    //获取外部化配置 key 为hello的键值
    @Value("${hello}")
    private String hello;

    
    @GetMapping("/hello")
    public String configHelloWorld1() {
        return this.hello;
    }
}

4.启动并测试

由于之前启动了 注册中心和配置中心,所以我们现在只需要直接启动客户端就行。

我们启动程序会看到控制台打印

p7.png

可以看到,我们已经读取了 配置中心的配置。

我们打开注册中心页面,确认一下是否已经注册进来了。

p8.png

可以确认没问题。接下来就是见证奇迹的时刻。让我们测试一下是否可以读取到 配置中心的配置吧。

p9.png

结果很完美,读取并且输出了内容。

总结

分布式配置中心方便了我们整体项目的运维以及管理,使用好了可以使我们的项目开发部署测试都完美的进行。让我们继续加油了解吧,把学到的东西利用最大化。

相关文章

网友评论

      本文标题:Spring Cloud系列--Spring Cloud Con

      本文链接:https://www.haomeiwen.com/subject/najyaqtx.html