SpringCloud之Eureka

Eureka简介

Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含server和client两部分。Spring Cloud将它继承在子项目Spring Cloud Netflix中,从而实现服务的发现与注册。

Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP地址,端口号,服务名称等等),Eureka Server会记录这些信息。

Eureka Client是一个Java客户端,用户简化与Eureka Server的交互。

微服务启动之后,会周期性(默认30秒)的向Eureka Server发送心跳以续约自己的“租期”。

如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销这个实例(默认90秒)。

默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例相互之间通过复制的方式实现服务注册表中数据同步。

Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕机,服务消费之也可以使用缓存中的信息找到服务提供者并完成调用。

编写Eureka Server

1.pom.xml文件添加如下依赖

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

2.在启动类上添加@EnableEurekaServer注解,声明这是一个Eureka Server。

@SpringBootApplication
@EnableEurekaServer
public class MicroserviceDiscoveryEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicroserviceDiscoveryEurekaApplication.class, args);
    }

}

在application.properties文件添加一下内容。

server.port=8761

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.default-zone=http://localhost:8761/eureka/

eureka.client.register-with-eureka:表示是否将自己注册到Eureka Server,默认为ture。由于当前应用就是一个Eureka Server,所以设置为false。

eureka.client.fetch-registry:表示是否从Eureka Server获取注册信息,默认为true。由于这是一个单点的Eureka Server,不需要同步其他Eureka Server节点的数据,所以设置为false。

eureka.client.service-url.default-zone:设置与Eureka Server交互的地址,查询服务和注册服务都要依赖这个地址。默认是http://localhost:8761/eureka;多个地址间可以使用,隔开。

访问http://localhost:8761/我们就可以看到Eureka Server界面

将微服务注册到Eureka Server上

新建一个SpringBoot项目,在pom.xml添加如下依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependencyManageent>
    <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>

在application.properties中添加一下配置

spring.application.name=microservice-provider-user
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
eureka.instance.ip-address=true

spring.application.name:表示将自己注册到Eureka Server上的应用名字

eureka.instance.ip-address:表示将自己的IP注册到Eureka Server。如不配置该属性或者将其配置为false,则表示注册微服务所在操作系统的hostname到Eureka Server。

启动项目,可以在Eureka Server上看到我们注册的服务

SpringCloud之Eureka