龙空技术网

Microservices和 Spring Cloud Config Server

科技狠活与软件技术 136

前言:

现在咱们对“apache端口9090”可能比较关心,各位老铁们都想要了解一些“apache端口9090”的相关文章。那么小编也在网络上网罗了一些对于“apache端口9090””的相关知识,希望大家能喜欢,看官们快快来了解一下吧!

Spring Cloud 的配置服务器功能使跨系统更新微服务变得轻而易举。让我们一步一步地设置和更改属性。
使用微服务,我们创建了一个中央配置服务器,其中微服务的所有可配置参数都是编写版本控制的。中央配置服务器的好处是,如果我们更改微服务的属性,它可以即时反映该属性,而无需重新部署微服务。
在微服务时代之前,我们创建了一个属性文件来维护我们的可配置参数,因此如果我们更改参数值或添加或删除参数,我们通常需要重新启动应用程序容器。此外,考虑环境。通常,我们有 Development、Staging 和 Prod,每个都有单独的 URL 用于不同的服务,如 JMS、JNDI 等。此外,如果环境发生变化,我们需要选择正确的属性文件。例如,对于开发,我们需要加载开发属性文件。Spring 提供了 Profile 概念,其中基于传递的配置文件,Spring 加载适当的环境属性。
就像配置文件值是dev一样,它会加载所有{}-dev.properties。
但主要问题是它与代码库绑定或静态打包,所以属性文件的任何更改都意味着重新构建和重新部署应用程序,这违反了微服务原则,其中明确指出:
只需构建一次并在任何环境中部署。
因此,不知何故,我们需要一种维护所有属性的技术,如果有任何属性发生更改,它将获取更改并反映它们,而无需重新构建或重新启动应用程序。
答案是 Spring Cloud 配置服务器。

Spring Cloud 配置服务器架构让我们介绍配置服务器的一些重要组件。
存储库区域:配置服务器将所有微服务属性文件存储在版本控制系统中,因此它们可以被...版本控制。而这个版本控制系统可以是最流行的 Git,也可以是 SVN。此外,您可以将其存储在文件系统中——那么您的配置文件应该是本机的。


配置服务器根据服务 ID 存储每个微服务属性。我们可以通过在微服务的 bootstrap.properties 文件中为 spring.application.name 属性提供一个唯一值来配置微服务服务 ID。
假设我有一个员工工资单微服务。我可以在 Employee Payroll bootstrap.property 文件中创建如下服务 ID。

spring.application.name = EmployeePayroll。

现在,在配置服务器中,我们有一组基于环境的 Employee Payroll 属性文件,例如

EmployeePayroll-dev.properties


EmployeePayroll-stg.properties


EmployeePayroll-prod.properties

这些是基于配置文件价值的。
请注意,属性文件名应采用以下格式。
{ServiceID}-{profile}.properties。
如果我们没有在属性文件中给出配置文件名称,那么它被认为是默认的。在这里,EmployeePayroll-dev 是服务 ID,dev/stg/prod 是我们的环境。
REST 端点:每个微服务都需要与配置服务器通信,以便它可以解析属性值,因为所有属性都存储在 thre.xml 中。配置服务器发布一个 REST 端点,微服务通过该端点进行通信,或者我们可以在浏览器中查看属性。
Actuator:如果微服务的任何属性已更改,则意味着它们已通过 Actuator refresh REST 端点进行刷新。通过这样做,我们的微服务在没有重建应用程序的情况下得到了更新。
云总线:这是可选的,但非常有用。想想我们是否需要为每个服务手动刷新执行器端点。这将是一项繁重的任务,因为一个复杂的业务领域有许多微服务。在这种情况下,云总线有助于将更新的属性推送到其所有订阅的微服务。但是要触发这个动作,我们需要手动刷新一个微服务端点。稍后我会谈到云总线。
负载均衡器:配置服务器应该是高可用的。如果我们只维护一个配置服务器框/容器,那将是单点故障。理想情况下,它应该是负载平衡的,以便我们可以运行多个配置服务器实例,并且负载平衡器池应该有一个公共地址,每个微服务都可以在其中进行通信。

配置服务器架构图(不带负载均衡和云总线)
图片标题
现在我们将使用 Spring Cloud 创建一个配置服务器。

设置文件系统在这里,我将设置一个基于本机文件系统的配置服务器。我没有使用 Git,所以我会创建一个本地文件结构,但是在生产环境中,请创建一个远程 Git 存储库。要设置本地文件系统,请在 Linux 环境中执行以下命令(Windows 相同,但您只需要使用 GUI 创建文件。)
mkdir CentralRepo
cd CentralRepo
touch config.properties
vi config.properties
Hit insert
Write welcome.message=Hello Spring Cloud
Hit esc and wq!



配置服务器的编码要实现配置服务器,我们将使用 Spring Cloud Netflix 配置服务器分发。
转到,然后使用依赖关系执行器和配置服务器创建一个模板项目。
该页面将如下所示:

现在点击Generate Project按钮,它将下载代码模板。
之后,我提取代码模板,然后将该项目作为 Maven 项目导入 Eclipse。
如果打开 pom.xml,它将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="; xmlns:xsi=";
xsi:schemaLocation=" ;>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>MicroserviceCongigServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MicroserviceCongigServer</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-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>
现在打开com.example.MicroserviceCongigServer 包下的MicroserviceConfigServerApplication.java 。
在类的顶部放置一个 @EnableConfigServer注释。通过这样做,我们告诉 Spring Boot 应用程序将其视为配置服务器模块。
MicroserviceConfigServerApplication.java
package com.example.MicroserviceConfigServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableConfigServer
public class MicroserviceConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceConfigServerApplication.class, args);
}
}
现在将应用程序属性重命名为bootstrap.properties并放入以下行
server.port=9090
spring.cloud.config.server.native.searchLocations={user.home}/CentralRepo/
SPRING_PROFILES_ACTIVE=native

所以配置服务器在端口 9090 上运行,我们放置本地文件系统位置,以便配置服务器从它而不是 Git 获取属性文件。我们还告诉配置服务器这是一个本机配置文件。
至此,我们都准备好运行 MicroserviceConfigServerApplication.java。现在使用对其进行测试,我们可以看到以下响应:
{
"name":"config",
"profiles":[
"default"
],
"label":null,
"version":null,
"state":null,
"propertySources":[
{
"name":";,
"source":{
"welcome.message":"Hello Spring Cloud"
}
}
]
}

标签: #apache端口9090