微服务学习之路
微服务学习之路
,本系列文章是博主学习微服务的路程,特意分享自己的学习笔记,也为了以后能回溯查看。
前言
本章记录了学习服务配置的学习路程和心得笔记。
一、管理配置
基于云的微服务强调以下几点:
- 应用程序的配置与正在部署的实际代码完全分离。
- 构建服务器、应用程序以及一个不可变的镜像,它们在各环境中进行提升时永远不会发生变化。
- 在服务器启动时通过环境变量注入应用程序配置信息,或者在微服务启动时通过集中式存储库读取应用程序配置信息。
管理配置需要遵循以下4条原则:
- 分离——将服务配置和服务的实际物理部署完全分开。
- 抽象——将访问配置数据的功能抽象到一个服务接口中。
- 集中——因为基于云的应用程序可能会有数百个服务,所以最小化用于保存配置信息的不用存储库的数量至关重要。
- 稳定——因为应用程序的配置信息与部署的服务完全隔离并集中存放,所以不管采用何种方案实现,至关重要的一点就是保证其高可用和冗余。
1.1. 配置管理架构
服务配置是发生在微服务启动阶段的引导过程,这一过程主要做了以下几件事:
- 当一个微服务实例出现时,它将调用一个服务端点来读取其所在环境的特定配置信息。配置管理的连接信息将在微服务启动时被传递给微服务。
- 实际的配置信息驻留在存储库中。基于配置存储库的实现,可以选择使用不同的实现来保存配置数据。配置存储库的实现选择可以包括源代码控制下的文件、关系型数据库或键值数据存储。
- 应用程序配置数据的实际管理与应用程序的部署方式无关。配置管理的更改通常通过构建和部署管道来处理,其中配置的更改可以通过版本信息进行标记,并通过不同的环境进行部署。
- 进行配置管理更改时,必须通知使用该应用程序配置数据的服务,并刷新应用程序数据的副本。
1.2. 使用Spring Cloud Config配置管理
选择Spring Cloud Config做配置管理有以下原因:
- Spring Cloud Config配置服务器易于搭建和使用。
- Spring Cloud Config配置与Spring Boot紧密集成。开发人员可以使用一些简单易用的注解来读取所有应用程序的配置数据。
- Spring Cloud Config配置服务器提供多个后端用于存储配置数据。
- Spring Cloud Config配置服务器可以直接与Git源控制平台集成。Spring Cloud配置与Git的集成消除了解决方案的额外依赖,并使版本化应用程序配置数据成为可能。
二、构建Spring Cloud配置服务器
Spring Cloud配置服务器是基于REST的应用程序,它建立在Spring Boot之上。Spring Cloud配置服务器部署独立服务器,相反,开发人员可以将他嵌入现有的Spring Boot应用程序中,也可以在迁入它的服务器中启动新的Spring Boot项目。
下面是构建一个Spring Cloud配置服务器的过程:
1、建立一个自定义名称的新项目目录。本章以新建confsvr项目为例,并在confsvr目录中创建一个新的Maven文件,该文件将用于拉取启动Spring Cloud配置服务器所需的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-boot-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.1.RELEASE</version>
</parent>
<groupId>com.throughtmechanix</groupId>
<artifactId>configurationserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Config Service</name>
<description>Config Service Demo</description>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.thoughtmechanix.confsvr.ConfigServerApplication</start-class>
<java.version>1.8</java.version>
<docker.image.name>johncarnell/tmx-confsvr</docker.image.name>
<docker.image.tag>chapter3</docker.image.tag>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
</project>
2、需要再多创建一个文件来让核心配置服务器正常运行。这个文件是位于confsvr/src/main/resource目录中的application.yml。此文件说明Spring Cloud配置服务器要侦听哪个端口以及在哪里可以找到提供配置数据的后端。
然后在resource目录下分别创建默认环境、开发环境和生成环境的配置。
application.yml文件示例:
server:
port: 8888
spring:
profiles:
active: native
cloud:
config:
server:
native:
search-locations:
- file:/D:/MyData/shenjr/IdeaProjects/jrol_test/09-eagle-eye/confsvr/src/main/resources/licensingserver
licensingservice.yml文件示例:
tracer:
property: "I AM THE DEFAULT"
spring:
jpa:
database: "POSTGRESQL"
show-sql: "true"
datasource:
platform: "postgres"
3、创建Spring Cloud Config引导类
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
4、调用接口进行调试。
调用接口:localhost:8888/licensingserver/default
总结
以上是关于服务配置的介绍。