springcloud_config教程(2)--高可用的config-server

x33g5p2x  于2021-12-20 转载在 其他  
字(5.8k)|赞(0)|评价(0)|浏览(274)

  通过之前的快速入门,config-client是可以从config-server中获取配置了,但是有几个问题:

  1)config-server服务如果崩了,config-client就无法获取新的配置了,需要将config-server配置为集群而实现高可用。

  2)config-server如果地址改变了,那么config-client中配置的地址也要改变,不太方便,需要解耦合。

  所以这里就要提到注册中心Eureka,Eureka是一个自带负载均衡的注册中心,可以将服务注册在这里,调用服务的时候从这里获取服务。Eureka分为Eureka-server和Eureka-client,前者的作用就是注册中心,保存各种服务的信息;后者的作用是与注册中心交互,包括将服务注册到注册中心和从注册中心获取服务。下面开始搭建高可用的config-server集群,使用2个工程来模拟config-server集群。

  一.新建Eureka-server工程。

  1.新建工程server1,完整的pom如下:

|

<?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>

   <groupId>com.lx.springCloudLearn</groupId>
   <artifactId>server1</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>server1</name>
   <description>Demo project for Spring Boot</description>
<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>1.5.8.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.7</java.version>
      <spring-cloud.version>Edgware.SR1</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-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>

|

  2.在入口类上注解@EnableEurekaServer:

  3.在配置文件中,配置如下:

|

server.port=8761
# 通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server,而非client
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
# 提供服务的路径
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
# 自我保护机制:
# Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,
# 如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由
# 于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。
# 关闭后,会在服务停止后大约3分钟,将服务剔除Eureka Server。
eureka.server.enable-self-preservation=false

|

 4.打开localhost:8761,就能看到注册中心的网页,目前还没有服务:

  出现红字是因为关闭了自我保护模式。

  二.搭建config-server集群并注册到eureka-server。

  1.依旧使用快速入门中的工程,并且新建一个和config-server除了端口号,其他地方一样的工程,叫做config-server2,用来在本机组成集群。

  2.在两个config-server工程中,增加依赖:

|

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

|

  3.在两个config-server工程的入口类上,增加注解:@EnableEurekaClient,作用是将服务注册到eureka-server;

  4.在两个config-server中配置如下,其中端口号不同:

|

#在eureka的应用名称,config-client可以根据此名称获取配置信息
spring.application.name=config-server
server.port=9999
#将config-server服务也注册到eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#git仓库地址
spring.cloud.config.server.git.uri=xxxx
#项目启动时从git拉取配置,拉取失败则项目停止并抛出异常。默认规则是使用时才拉取配置
spring.cloud.config.server.git.clone-on-start=true
#git登录帐号
spring.cloud.config.server.git.username=liuxiang
#git登录密码
spring.cloud.config.server.git.password=xxxx
#仓库中的相对地址,即文件夹,多个文件夹用逗号隔开
spring.cloud.config.server.git.searchPaths=myconfig
#git分支
spring.cloud.config.label=master
#clone下来的配置文件保存在本地的位置,文件夹不存在会自动创建。连不上git时会使用这里的配置
spring.cloud.config.server.git.basedir=E:\\111\\

|

   5.打启动两个config-server,打开localhost:8761,就能看到两个config-server服务已经注册到eureka-server:

  注意:

  这里的服务上没有显示Ip,可以通过如下的设置,达到显示为ip:port的目的:

  在配置文件中,配置:

| <br>eureka.instance.prefer-ip-address=true<br><br>eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}<br> |

  效果如下:

  

  

  三. config-client从eureka-server中调用config-server的服务

  1.在config-client的pom中加入依赖:

|

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

|

  2.改造配置文件,如下:

|

#配置文件名称,即 "-" 之前的
spring.cloud.config.name=config
#配置文件profile,即"-"之后的
spring.profiles.active=dev
#配置文件所在分支
spring.cloud.config.label=master
#注册中心地址
eureka.clent.serviceUrl.defaultZone=http://localhost:8761/eureka/
spring.application.name=config-client
#开启去注册中心寻找config-server服务
spring.cloud.config.discovery.enabled=true
#注册中心的config-server服务名,会根据这个名称找到地址,从而获取配置
spring.cloud.config.discovery.service-id=config-server
server.port=8881
#配置缓存目录,避免配置丢失.如下的配置会将配置文件缓存在当前工程目录的config-repo文件夹,没有则自动新建
spring.cloud.config.server.git.basedir=config-repo

|

  注意:

  如果config-client启动时,从config-server拉取不到需要的配置,config-client项目依旧会处于运行状态,为防止这种情况,可以在config-client的配置文件中增加:spring.cloud.config.fail-fast=true;那么config-client在没有获取到配置时会抛出异常并终止项目;为防止因瞬间的网络问题导致项目终止,可以设置重试,只需要再在config-client项目中引入spring-boot-starter-aop的依赖,默认情况下会最多重试6次,间隔1秒。

  3.在入口类上增加注解:@EnableDiscoveryClient

  4.启动config-client,就可以从两个config-server获取配置,并且自带负载均衡,且任意config-server关闭后,config-client依旧可以从另一个config-server获取配置,实现了config-server的高可用,并且当config-server的git地址改变之后,只需要在config-server中修改git地址,而config-client中无需更改,实现了解耦合。

相关文章