天天看点

Spring cloud学习笔记9-配置中心Config1. 概述2. 分布式配置中心3. 高可用分布式配置中心

配置中心Config

  • 1. 概述
  • 2. 分布式配置中心
    • 2.1 新建工程spring-config-server
    • 2.2 spring-config-server工程pom引入jar
    • 2.3 spring-config-server工程启动类
    • 2.4 spring-config-server工程配置文件application
    • 2.5 新建工程spring-config-client
    • 2.6 spring-config-client工程pom引入jar
    • 2.7 spring-config-client工程启动类
    • 2.8 spring-config-client工程配置文件application
    • 2.9 调用测试
  • 3. 高可用分布式配置中心
    • 3.1 建立服务注册中心
    • 3.2 spring-config-server工程修改
      • 引入pom
      • 配置文件application
      • 启动类
    • 3.3 config-client工程修改
      • 引入pom
      • 配置文件application
      • 启动类
      • 调用测试

1. 概述

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

2. 分布式配置中心

2.1 新建工程spring-config-server

新建一个maven的module工程,名称为spring-config-server,父亲pom为springcloud。需要引入config-server、starter-web的jar包。

2.2 spring-config-server工程pom引入jar

<?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>
		<artifactId>spring-cloud</artifactId>
		<groupId>com.lin</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<groupId>com.lin</groupId>
	<artifactId>spring-config-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<name>spring-config-server</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</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>

	<build>
		<pluginManagement><!-- lock down plugins versions to avoid using Maven 
				defaults (may be moved to parent pom) -->
			<plugins>
				<plugin>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.0.0</version>
				</plugin>
				<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.7.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.20.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-jar-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
				</plugin>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

           

2.3 spring-config-server工程启动类

启动类引入@EnableConfigServer注解,代码如下:

package org.spring.config.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

           

2.4 spring-config-server工程配置文件application

新建一个resources文件夹,建立application.properties文件,内容如下:

spring.application.name=config-server
server.port=8888

#git地址
spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
#git文件路径
spring.cloud.config.server.git.searchPaths=respo
#git的分支
spring.cloud.config.label=master
#git账号
spring.cloud.config.server.git.username=
#git密码
spring.cloud.config.server.git.password=

           

2.5 新建工程spring-config-client

新建一个maven的module工程,名称为spring-config-client,父亲pom为springcloud。需要引入config-server、starter-web的jar包。

2.6 spring-config-client工程pom引入jar

<?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>
		<artifactId>spring-cloud</artifactId>
		<groupId>com.lin</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<groupId>com.lin</groupId>
	<artifactId>spring-config-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<name>spring-config-client</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.7</maven.compiler.source>
		<maven.compiler.target>1.7</maven.compiler.target>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement><!-- lock down plugins versions to avoid using Maven 
				defaults (may be moved to parent pom) -->
			<plugins>
				<plugin>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.0.0</version>
				</plugin>
				<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.7.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.20.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-jar-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
				</plugin>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

           

2.7 spring-config-client工程启动类

新建启动类,引入@RestController,开放接口getFoo给浏览器调用:

package org.spring.config.client;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
    @Value("${foo}")
    String foo;
    @RequestMapping(value = "/getFoo")
    public String getFoo(){
        return foo;
    }
}

           

2.8 spring-config-client工程配置文件application

新建一个resources文件夹,建立application.properties文件,其中spring.application.name将于git上面的配置文件名称对应(本例叫config-client,对应git上面文件名称为config-client-dev.properties),内容如下:

spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri= http://localhost:8888/
server.port=8881

           

2.9 调用测试

打开浏览器,输入http://localhost:8881/getFoo

可以获取如下信息:

foo version 2

3. 高可用分布式配置中心

上一章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下:

Spring cloud学习笔记9-配置中心Config1. 概述2. 分布式配置中心3. 高可用分布式配置中心

3.1 建立服务注册中心

根据章节《服务注册中心Eureka》步骤建立一个服务注册中心,本例利用的是之前建立的服务注册中心。

3.2 spring-config-server工程修改

本例中,利用章节《分布式配置中心》里面建立的工程spring-config-server上面进行修改。

引入pom

在pom文件中引入服务注册的客户端eureka-client的jar包:

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

           

配置文件application

在配置文件application.properties中增加如下信息(将config-server注册到服务中心):

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

启动类

在启动类中,增加注解@EnableEurekaClient即可。

3.3 config-client工程修改

本例中,利用上一个《分布式配置中心》里面建立的工程spring-config-client上面进行修改。

引入pom

在pom文件中引入服务注册的客户端eureka-client的jar包:

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

配置文件application

配置文件修改(注释掉config.uri的方式,引入注册中心,配置config的服务名),代码如下:

spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
#spring.cloud.config.uri= http://localhost:8888/
server.port=8881

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server

           

启动类

在启动类中,增加注解@EnableEurekaClient即可。

调用测试

1) 启动eureka-server的启动类

2) 启动spring-config-server的启动类

3) 启动spring-config-client的启动类

4) 打开浏览器,输入http://localhost:8881/getFoo显示信息如下:

foo version 2

本文参考文献:https://blog.csdn.net/forezp/article/details/70148833/

继续阅读