Eureka概述:
Eureka是Netflix的一个子模块, 也是核心模块之一。Eureka是一个基于REST的服务, 用于定位服务, 以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务框架来说非常重要, 有了服务注册和发现, 只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于Dubbo的注册中心, 比如Zookeeper。
Eureka架构:
Eureka采用C-S设计架构。Eureka Server作为服务注册功能的服务器, 它是服务中策中心。而系统中的其他微服务, 使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中的各个微服务是否正常运行。
Eureka中包含两个组件, Eureka Server和Eureka Client
Eureka Server提供注册服务,各个节点启动后, 会在Eureka Server中进行注册, 这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息, 服务节点的信息可以在界面中直接观看到。
Eureka Client是一个java客户端, 用于简化Eureka Server的交互, 客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。在应用启动后, 将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期中没有收到某个节点的心跳, 将会从服务注册表中将此服务节点移除(默认90秒)。
创建服务注册中心:microservicecloudeureka7001
在启动类中必须添加@EnableEurekaServer, 启动注册中心, 接受其他服务注册进来
测试是否启动成功: 在浏览器中输入localhost:7001 出现如下图的图标页面说明启动成功
修改服务提供工程:microservicecloudproviderdept8001
在启动类中必须添加@EnableEurekaClient, 启动服务客户端,向注册中心注册
pom.xml中添加Eureka客户端依赖
在application.yml中添加Eureka配置
配置微服务名称:
修改入驻Eureka中的别名id:
修改访问名称有IP信息提示:
修改前:
修改后:
修改微服务info内容详细信息:
在客户端pom.xml中添加依赖
在总工程pom中添加检索插件:
在客户端application.yml中添加info内容详细信息:
结果:
Eureka自我保护机制:
某一时刻某一服务不可用, Eureka不会立即清理,依旧会对该服务的信息进行保存。
在自我保护模式中, Eureka Server会保护服务注册表中的信息, 不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时, 该Eureka Server节点就会自动退出自我保护模式。它的设计思想是: 宁可保留错误的服务注册信息, 也不盲目的注销任何可能健康的服务实例。使用自我保护模式可以使Eureka集群更加健壮。稳定。
在SpringCloud中可以使用eureka.server.enable-self-preservation=false禁用自我保护模式。
因为长时间没有任何操作, Erueka Server自动启动自我保护模式。
服务发现:
添加服务发现接口:
在启动类中添加@EnableDiscoveryClient启动服务发现注解。
测试:http://localhos:8001/dept/discovery
修改微服务消费客户端服务发现:microservicecloudconsumerdept80
添加远程调用服务发现接口:
集群搭建:
创建microservicecloudeureka7002
创建microservicecloudeureka7003
修改启动类名称。
因为只有一台机器, 所以得做一下映射: 修改C:\Windows\System32\drivers\etc目录下hosts文件
修改配置文件:
microservicecloudeureka7001
microservicecloudeureka7002
microservicecloudeureka7003
microservicecloudproviderdept8001
测试是否搭建成功: 在浏览器重输入http://eureka7001.com:7001/是否显示如下信息
其他节点测试同上。
Eureka和Zookeeper的区别:
传统的关系型数据库遵循ACID(A:原子性, C:一致性, I:独立性, D:持久性)
非关系型数据库遵循CAP三选二原则(C:强制一致性, A:可用性, P:分区容错性)
Eureka遵循AP原则
Zookeeper遵循CP原则
Eureka可以很好的应对因网络故障导致部分节点失去联系的情况, 而不会像Zookeeper那样使整个注册服务瘫痪。
GitHub源码:https://github.com/wcd19901010/microservicecloud