Eureka简介
**Eureka是由Netflix公司推出的服务注册和发现工具。现已被Spring Cloud集成,提供了开箱即用的支持。(直接在项目中直接集成,快捷使用)**
1. Eureka角色
Eureka中分为两个角色:**Eureka Server(Eureka服务)**和 **Eureka Client(Eureka客户端)**。无论是服务端还是客户端其本质都是一个Java项目,在Spring Cloud中主要通过启动类上添加**[@EnableEurekaServer ](/EnableEurekaServer ) ** 和 **[@EnableEurekaClient ](/EnableEurekaClient ) **(可以省略)来区分当前应用程序是服务端还是客户端。Eureka Server可以理解成之前我们讲解的Zookeeper注册中心,只是现在使用的是Java项目实现的(Spring Cloud内嵌Eureka)。也可以使用阿里巴巴的NacosEureka Client 可以理解成所有需要注册到Eureka Server中的项目。为什么需要向注册中心中注册呢?因为注册后别人才能通过注册中心获取到项目信息和项目所在服务器信息,通过这些信息调用这个项目。Spring Cloud中每个项目调用的信息都存储在了注册中心中(Eureka)。
2. Eureka 与 Dobbo 区别
2.1 CAP理论
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP
C(一致性):在分布式系统中,是否立即达到数据同步的效果(平时多说的强一致性)。在分布式系统一定最终会一致的。如果请求完,整个分布式系统同步后才返回结果,叫做强一致性。如果先返回结果,在一定时间后才实现一致性就叫做弱一致性。
A(可用性):在分布式系统中,其中一些节点出现问题,整个整体是否还可用。还可以从性能角度上考虑,整个分布式系统反应较快也属于达到了可用性。
P(分区容错性):在分布式系统中,是否可以在有限的时间内达到数据一致的效果,如果因为网络等问题最终没有达到一致性,这时称为出现分区错误。
2.2 Zookeeper 保证 CP
在Zookeeper集群中,Zookeeper的数据保证的是一致性的。当Leader出现问题时,整个Zookeeper不可用,需要花费30~120s来进行重新选择leader,当leader选举成功以后才能进行访问整个Zookeeper集群。通过这点也可以看出Zookeeper是强一致性的,集群所有节点必须能通信,才能用集群。虽然这样集群数据安全了,但是可用性大大降低了。而作为注册中心来说可用性是很重要的。
2.3 Eureka保证AP
Eureka发现了Zookeeper的问题,所以它舍弃了Zookeeper中强一致性,而保证了可用性。在Eureka集群中所有的节点都是保存完整的信息的,当Eureka Client向Eureka中注册信息时,如果发现节点不可用,会自动切换到另一台Eureka Sever,也就是说整个集群中即使只有一个Eureka可用,那么整个集群也是可用的。同时Eureka的自我保护机制也是实现可用性非常重要的体现。
3. 搭建eureka-server
- 引入 eureka-server 依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
- 编写配置文件
# 因为当前项目为服务,不需要向服务注册自己,默认为trueeureka.client.register-with-eureka=false# 因为当前为非集群版eureka,所以不需要同步其他节点数据eureka.client.fetch-registry=false# 端口默认 8761server.port=8761# 当server.port配置不是8761时需要配置内容# service-url:# defaultZone: http://localhost:${server.port}/eureka/
- 启动类添加注解
@SpringBootApplication//激活 Eureka Server 相关配置的注解@EnableEurekaServerpublic class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}}
- 访问 web 页面

4. 搭建 eureka-client
- 引入 eureka-client 依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
- 编写配置文件
# 定义服务名称spring.application.name=eureka-client1# 注册中心地址信息,为默认可省略#eureka:# client:# serviceUrl:# defaultZone: http://localhost:8761/eureka/
- 访问 web 页面

5. Eureka配置参数
- 客户端配置

- 服务实例配置

