1、注册中心的意义
注册中心管理服务的注册、发现、熔断、负载、降级等。
2、Eureka的组成
Eureka由两个组件组成:Eureka服务器和Eureka客户端。
- Eureka服务器用作服务注册服务器。
- Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持
上图简要描述了Eureka的基本架构,由3个角色组成:
(1)Eureka Server:提供服务注册和发现
(2)Service Provider:服务提供方
将自身服务注册到Eureka,从而使服务消费方能够找到
(3)Service Consumer:服务消费方
从Eureka获取注册服务列表,从而能够消费服务
3、项目实例
(1)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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.springcloud</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<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-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)yml文件
server:
port: 8761
spring:
application:
name: eureka-serve
eureka:
server:
enable-self-preservation: false #关闭eureka的自我保护,防止已被关停的节点也错误的显示在线
client:
register-with-eureka: false #是否允许客户端向Eureka获取注册表信息,单机模式服务器端设置为false
fetch-registry: false #是否允许向Eureka Server注册信息,单机模式服务器端设置为false
service-url:
defaultZone: http://localhost:8761/eureka/ #此eureka server的应用注册地址
(3)启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
启动后访问localhost:8761
集群
(1)修改host
127.0.0.1 peer1 peer2 peer3
(2)从application.yml复制出application-peer1.yml,application-peer2.yml,application-peer3.yml三个文件,内容如下
# application-peer1.yml
server:
port: 8761
spring:
application:
name: eureka-serve
eureka:
instance:
hostname: peer1
server:
enable-self-preservation: false #关闭eureka的自我保护,防止已被关停的节点也错误的显示在线
client:
register-with-eureka: true #是否允许客户端向Eureka获取注册表信息,集群模式服务器端设置为true
fetch-registry: true #是否允许向Eureka Server注册信息 ,集群模式服务器端设置为true
service-url:
defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ #此eureka server的应用注册地址
# application-peer2.yml
server:
port: 8762
spring:
application:
name: eureka-serve
eureka:
instance:
hostname: peer2
server:
enable-self-preservation: false #关闭eureka的自我保护,防止已被关停的节点也错误的显示在线
client:
register-with-eureka: true #是否允许客户端向Eureka获取注册表信息,集群模式服务器端设置为true
fetch-registry: true #是否允许向Eureka Server注册信息 ,集群模式服务器端设置为true
service-url:
defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/ #此eureka server的应用注册地址
# application-peer3.yml
server:
port: 8763
spring:
application:
name: eureka-serve
eureka:
instance:
hostname: peer3
server:
enable-self-preservation: false #关闭eureka的自我保护,防止已被关停的节点也错误的显示在线
client:
register-with-eureka: true #是否允许客户端向Eureka获取注册表信息,集群模式服务器端设置为true
fetch-registry: true #是否允许向Eureka Server注册信息 ,集群模式服务器端设置为true
service-url:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/ #此eureka server的应用注册地址
(3)打包启动
# 打包
mvn clean package -Dmaven.test.skip=true
# 分别以 peer1,peer2,peer3配置信息启动 Eureka
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3
在启动peer1的时候,控制台会有一些异常信息,大概就是拒绝连接、请求超时,不用管,等启动peer2,peer3的时候就好了。
依次启动完成后,访问http://localhost:8761/,http://localhost:8762/,http://localhost:8763/
根据图可以看出 peer1 的注册中心 DS Replicas 已经有了 peer2,peer3 的相关配置信息,并且出现在 available-replicas 中。我们手动停止 peer3 来观察,发现 peer3 就会移动到 unavailable-replicas 一栏中,表示 peer3 不可用。