一、什么是高可用的注册中心
学习了单例的服务注册中心后(具体参考https://blog.csdn.net/notMoonHeart/article/details/84949475),需要考虑,如果服务中心挂掉了,那么我们的服务怎么监测呢?所以,这里引用了高可用的服务注册中心,来解决,发生故障之后,服务注册中心是怎么处理的。
处理的思路:简单来讲,就是布置一个服务注册中心集群(多个单例的服务注册中心,但是它们之间是有联系的),然后每个服务注册中心之间互相注册,当一个服务注册中心挂掉的时候,另一个服务注册中心会接受挂掉服务中心的活。
二、搭建简单的高可用服务注册中心
1.创建2个Spring Boot的工程,命名分别为eureka-server1,eureka-server2,然后设置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>
<groupId>eureka-server</groupId>
<artifactId>eureka-server</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
</dependencies>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里两个工程的pom.xml文件是相同的
2.设置工程的配置文件
eureka-server1的application.properties文件,代码如下:
spring.application.name=eureka-server
server.port=8888
server.servlet.context-path=/eureka
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:8889/eureka/eureka/
eureka-server2的application.properties文件,代码如下:
spring.application.name=eureka-server
server.port=8889
server.servlet.context-path=/eureka
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:8888/eureka/eureka/
这里的默认地址互相访问,会发现,不同于单例的服务注册中心,少了两个属性。
eureka.client.register-with-eureka和eureka.client.fetch-registry,这里默认是true,一般只有单例的服务注册中心才会设置成true
3.在启动类添加@EnableEurekaServer注解,标记为服务注册中心
4.在文件中添加对peerl 和peer2的转换
linux系统路径:/etc/hosts
windows系统路径:C:\Windows\System32\drivers\etc\hosts
在文件最后添加两行信息,信息如下
127.0.0.1 peer1
127.0.0.1 peer2
具体不明白这里到底有什么用
5.分别启动项目访问,http://localhost:8888/eureka,http://loaclhost:8889/eureka可以看到,两个服务中心中心互相注册,如图:
注意:这里先启动的项目可能会抛出Cannot execute request on any known server的异常信息,不要方!这是因为第二个项目未启动,第一个找不到他的注册服务的地方。