Eureka 的介绍和简单使用

253 阅读3分钟

1.1. 搭建 Eureka Server

首先再创建一个 eureka-server 的子模块

然后引入 eureka-server 的依赖和项目构建的插件

<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  </dependency>
</dependencies>
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

接着还需要编写配置文件

server:
  port: 10010  
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
    register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

然后编写启动类进行启动,和之前的启动类不同的是,这里还需要加上@EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class,args);
    }
}

启动之后访问服务就可以看到注册中心的界面了:

1.2. 服务注册

把 product-service 注册到 eureka-server 中需要在 product-service 中添加客户端的依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

然后配置文件也需要完善一下,把要注册的服务的名称和 eureka 的地址配置一下:

在 product-service 的 yml 文件中添加一下配置,端口号也是之前配置的 eureka 的端口号,

#Eureka Client
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka/

然后配置服务名称

spring:
  application:
    name: product-service

接下来先启动 eureka 服务,再启动 product 服务就能够看到已经注册成功了

然后以相同的方式把 order-service 也添加到注册列表中

1.3. 服务发现

之后再进行远程调用的时候就可以从注册中心来获取要调用服务的 IP 和端口号了,需要在原来获取的方式上进行一些修改

接下来就能成功的获取到 product-service 的信息了

Eureka 和 Zookeeper 的区别:

Eureka 和 Zookeeper 都是用于服务注册和发现的工具,区别有以下几点:

  1. Eureka 是 Netflix 开源的项目,而 Zookeeper 是 Apache 开源的项目
  2. Eureka 基于 AP 原则,保证高可用,Zookeeper 基于 CP 原则,保证数据一致性
  3. Eureka 每个节点都是均等的,Zookeeper 的节点区分 Leader 和 Follower 或 Observer,由于这个原因,如果 Zookeeper 的 Leader 发生故障,需要重新选举,选举过程集群会有短暂时间的不可用

2. CAP 理论

C:一致性(强一致性),所有节点在同一时间具有相同的数据

当客户端向数据库集群发送了一个数据修改的请求之后,数据库集群需要向客户端进行响应,此时就会有两种情况:

  1. 主数据库接收到请求并处理成功,不过数据还没有同步到从数据库,随着时间的推移会同步到从数据库
  2. 主数据库接收到请求,所有的从数据库数据同步成功时

弱一致性就是第一种情况,强一致性就是第二种情况,不论何时,主库和从库对外提供的服务都是一致的

A:可用性,保证每个请求都有响应,不过响应结果可能不对

P:分区容错性,当出现网络分区后,系统仍然能够对外提供服务

这三种特性是不能同时兼顾的,比如,在主数据库和从数据库同步数据的过程中网络出现了问题,那么这个过程就会被拉长,如果保证可用性,那么用户此时获取到的信息就不是强一致性的数据,在微服务架构中, P 是必须要保证的,所以 C 和 A 只能兼顾一个,也就是 CP 架构和 AP 架构