1. 什么是Eureka
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client
-
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
-
Eureka Client是一个java客户端,用于简化与Eureka Server的交互。
来看一个具体的例子,如下图所示:
- 服务提供者(库存服务、仓储服务、积分服务)都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。说白了,就是告诉Eureka Server,自己在哪台机器上,监听着哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号
- 服务消费者(订单服务)也有一个Eureka Client组件,这个Eureka Client组件会找Eureka Server问一下:库存服务在哪台机器啊?监听着哪个端口啊?仓储服务呢?积分服务呢?然后就可以把这些相关信息从Eureka Server的注册表中拉取到自己本地缓存起来。
2. Eureka原理
C/S架构 (Client/Server)
在注册中心eureka server注册的各个微服务实例,各个微服务每隔30s就要发送一个heartbeat证明自己还活着。
如果注册中心eureka server在90s内没有接收到某个微服务实例的heartbeat,就会从注册中心移除。
如果注册中心短时间内失去过多服务,会进入“自我保护机制”,不再删除服务,详见第6节。
3. 编写eurake-server注册中心
3.1 导入spring-cloud-starter-eurake-server依赖
3.2 在application.yml,配置eureka
3.3 开启eureka @EnableEurekaServer
3.4 eureka server UI界面
————————————————
3.4.1 修改eureka服务信息
“eureka服务提供者”的相关配置,会修改eureka server UI界面
3.4.2
4. euraka服务提供者
4.1 导入spring-cloud-starter-eureka依赖
4.2 在application.yml,配置eureka
4.3 开启eureka @EnableEurekaClient
5. euraka服务消费者
5.1 导入spring-cloud-starter-netflix-eureka-server
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
5.2 在application.yml,配置eureka
server:
port: 8082 #服务端口
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka/
spring:
application:
name: user-service-consumer
5.3 开启eureka @EnableDiscoveryClient
@EnableDiscoveryClient @SpringBootApplication public class SpringCloudUserConsumerApplication { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(SpringCloudUserConsumerApplication.class, args); } }
补充:服务调用实战
1-启动服务中心并注册服务
代码编写之后,按顺序启动spring-cloud-eureka、spring-cloud-user-service和spring-cloud-user-consumer,先访问注册中心http://localhost:9001/,出现下图说明注册中心和两个服务以及注册成功。以下是注册中心运行截图:
2-服务调用
打开postman访问http://localhost:8082/consumer/getUser?id=2,出现下图后说明服务已经调用成功。
postman调用截图
到此SpringCloud实现服务间调用功能已经全部实现
6. euraka自我保护机制
7. eureka server集群环境配置
为什么要配置集群?答案:一个eureka server挂了,其他两个能正常使用
7.1 集群环境配置原理
7.2 eureka server 互相挂载
7.3 微服务注册到集群
其实就是三个地方都发布
效果图:
8. CAP原则
CAP原则的核心:
一个分布式系统,不可能同时很好的满足CAP三个需求。
由于数据出错是不能忍受的,因此P原则始终包括。Eureka选择了AP,Zookeeper选择了CP
补充知识:
9. 【重点】Eureka vs ZooKeeper, Eureka好在哪里?