Eureka

Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。
各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里。

简介

Eureka包含两个组件:
Eureka ServerEureka Client

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息

Eureka Client是一个java客户端,用于简化与Eureka Server的交互。客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

Eureka基本规则
    服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心。

    注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地。

    之后服务会30s(可配置)发送一个心跳信息,续约服务。

    如果服务治理中心在90s内没有收到一个服务的续约,就会认为服务已经挂了,会把服务注册信息删掉。

    服务正常停止前,服务会主动发送一个停止请求,服务治理中心会删除这个服务的信息。

    如果Eureka Server收到的统计心跳失败的比例在15分钟之内是否低于85%
    (可配置,实际在生产环境上通常是由于网络不稳定导致)就会进入自我保护模式,
    在这种模式下,Eureka Server不会删除任何服务信息。


同步:多个 Eureka Server 之间通过复制的方式完成服务注册表的同步,形成 Eureka 的高可用

识别:Eureka Client 会缓存 Eureka Server 中的信息
   即使所有 Eureka Server 节点都宕掉,服务消费者仍可使用缓存中的信息找到服务提供者

续约:微服务会周期性(默认30s)地向 Eureka Server 发送心跳以Renew(续约)信息

续期:Eureka Server 会定期(默认60s)执行一次失效服务检测功能
   它会检查超过一定时间(默认90s)没有Renew的微服务,发现则会注销该微服务节点

Eureka服务端开发

父工程pom.xml定义SpringCloud版本

    <!--锁版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


eureka模块pom.xml引入eureka-server依赖

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


添加application.yml

server:
  port: 6868
eureka:
  client:
    fetch-registry: false    #是否将自己注册到Eureka服务中,本身就是所以无需注册
    register-with-eureka: false    #是否从Eureka中获取注册信息
    service-url:    #Eureka客户端与Eureka服务端进行交互的地址
      defaultZone: http://127.0.0.1:${server.port}/eureka/

#是否开启自我保护模式,默认为true
eureka.server.enable-self-preservation=true
#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.eviction-interval-timer-in-ms=60000



编写启动类

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


启动运行启动类,然后在浏览器地址栏输入 http://localhost:6868/

服务注册

依赖

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


每个微服务的application.yml,添加注册eureka服务的配置

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer-ip-address: true    # 设置微服务调用地址为IP优先(缺省为false)

# 再注册中心页面显示的微服务名
eureka.instance.instance-id=${spring.application.name}:${server.port}
# 心跳时间,即服务续约间隔时间(缺省为30s)
eureka.instance.lease-renewal-interval-in-seconds=30
# 发呆时间,即服务续约到期时间(缺省为90s)
eureka.instance.lease-expiration-duration-in-seconds=90


启动类添加注解

@EnableEurekaClient

文档

https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

原文地址:https://www.cnblogs.com/loveer/p/11431484.html