1、简介
在分布式微服务里面CAP 定理又称CAP 原则,指的是在一个分布式系统中, 一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)(这个特性是不可避免的),这三个要素最多只能同时实现两点,不可能三者兼顾,只能是AP和CP。
zk(CP,注重数据一致性),Eureka注重可用性(AP)
2、Eureka 使用
2.1、Eureka服务端
eureka注册中心,可以注册自己也可以注册别人。
1、引入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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!-- 实质还是springboot 项目-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bjpowernode</groupId>
<artifactId>eureka-server</artifactId>
<version>1.0</version>
<name>eureka-server</name>
<description>Demo project for Eureka-Server</description>
<properties>
<java.version>1.8</java.version>
<!-- 这里控制了springcloud 的版本-->
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
</properties>
<dependencies>
<!-- eureka 注册中心的服务端-->
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖管理,cloud 的依赖-->
<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、主启动类
@SpringBootApplication
@MapperScan(basePackages = {"com.test.mapper"})
@EnableEurekaServer // eureka-server 服务端注解
public class AppEurekaPlusMain {
public static void main( String[] args ) {
SpringApplication.run(AppEurekaPlusMain.class, args);
}
}
3、配置文件 application.yml
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
service-url: # eureka 服务端和客户端的交互地址,集群用逗号隔开,集群中没有主从概念,节点都是对等的,只要有一台存活,服务就能注册和调用。
defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
fetch-registry: true # 是否拉取服务列表
# Eureka-Server 不仅提供让别人注册的功能,它也能注册到别人里面,自己注册自己所以,在启动项目时,默认会注册自己,我们也可以关掉这个功能。
register-with-eureka: true # 是否注册自己(单机eureka 一般关闭注册自己,集群注意打开)
server:
eviction-interval-timer-in-ms: 30000 # 清除无效节点的频率(毫秒)--定期删除
enable-self-preservation: true #server自我保护机制,避免因网络原因造成误剔除,生产中建议打开
renewal-percent-threshold: 0.85 #85%,如果在一个机房的client端,15分钟内有85%的client没有续约,那么则可能是网络原因,认为服务实例没有问题,不会剔除他们,宁可放过一万,不可错杀一个,确保高可用
instance:
hostname: localhost # 服务主机名称
instance-id:${eureka.instance.hostname}:${spring.application.name}:${server.port} # 实例id
prefer-ip-address: true # 服务列表以ip 的形式展示
lease-renewal-interval-in-seconds: 10 # 表示eureka client 发送心跳给server 端的频率
lease-expiration-duration-in-seconds: 20 #表示eureka server 至上一次收到client 的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该实例
2.2、Eureka 客户端
1、引入依赖,pom.xml文件中添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、主启动类:
@SpringBootApplication
@MapperScan(basePackages = {"com.test.mapper"})
@EnableEurekaClient // eureka-client 客户端注解
public class AppEurekaPlusMain {
public static void main( String[] args ) {
SpringApplication.run(AppEurekaPlusMain.class, args);
}
}
3、配置文件 application.yml
server:
port: 8080
spring:
application:
name: eureka-client
eureka:
client:
service-url: #eureka 服务端和客户端的交互地址,集群用,隔开
defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
fetch-registry: true #拉取服务列表
registry-fetch-interval-seconds: 5 # 表示eureka-client 间隔多久去拉取服务注册信息
instance:
hostname: localhost # 服务主机名称
instance-id:${eureka.instance.hostname}:${spring.application.name}:${server.port} # 实例id
prefer-ip-address: true # 服务列表以ip 的形式展示
lease-renewal-interval-in-seconds: 10 # 表示eureka client 发送心跳给server 端的频率
lease-expiration-duration-in-seconds: 20 #表示eureka server 至上一次收到client 的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该实例
3、解释说明
Eureka 服务端是提供注册中心的功能,使用 Eureka 客户端的一个个微服务可以注册到 Eureka 服务端,Eureka 服务端可以集群部署,不分主次节点,节点之间地位平等,可以自己注册自己。通过配置设置Eureka 服务端和客户端相应参数。
4、总结
本文介绍 Eureka 注册中心的使用,相对来说,使用较少,使用方式了解即可。
本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)