备注:本文参考自简书,有部分内容进行了修改。

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务发现功能。本文主要讲解Eureka的工作原理、相关配置、如何搭建Eureka服务等几大部分。

1、Eureka工作原理

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

eureka.png

Eureka Server提供服务发现能力,各个微服务启动时会向Eureka Server注册自己的信息(服务名、IP、端口等),Eureka Server便存储了这个信息。

Eureka Client 是一个Java客户端,用于简化与Eureka的交互。每个微服务启动后会在间隔某个时间(默认30s)向Eureka Server发送心跳,让其知道自己仍健康存活。如果Eureka Server在一定时间内(默认90s)没有收到某个微服务实例的心跳,Eureka Server就会注销该实例。

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

Eureka Client会缓存服务注册表中的信息,无须每次都请求Eureka Server查询,缓解了Eureka Server的压力;即使Eureka Server所有节点都宕机,服务消费者依然可以查询自己缓存中的信息找到去调用服务提供者

2、Eureka常用配置

1、eureka.server.enable-self-preservation
是否关闭注册中心的保护机制。如果未关闭,Eureka会统计15分钟之内心跳失败的比例,低于85%将会触发保护机制,此时并不剔除服务提供者;如果关闭,服务注册中心会将不可用的实例剔除。

2、eureka.instance.prefer-ip-address
不使用主机名来定义注册中心的地址,而使用IP地址的形式,如果设置了eureka.instance.ip-address属性,则使用该属性配置的IP,否则自动获取除环路IP外的第一个IP地址。

3、eureka.instance.ip-address
IP地址

4、eureka.instance.hostname
设置当前实例的主机名称

5、eureka.instance.appname
服务名,默认取 spring.application.name 配置值,如果没有则为unknown

6、eureka.instance.lease-renewal-interval-in-seconds
定义服务心跳的间隔,单位:秒

7、eureka.instance.lease-expiration-duration-in-seconds
定义服务失效的时间,单位:秒

8、eureka.instance.status-page-url-path
状态页面的URL,相对路径,默认使用 HTTP访问,如果需要使用 HTTPS则需要使用绝对路径配置

9、eureka.instance.status-page-url
状态页面的URL,绝对路径

10、eureka.instance.health-check-url-path
健康检查页面的URL,相对路径,默认使用 HTTP访问,如果需要使用HTTPS则需要使用绝对路径配置

11、eureka.instance.health-check-url
健康检查页面的URL,绝对路径

12、eureka.client.service-url
指定服务注册中心地址,类型为HashMap,并设置有一组默认值,默认的Key为defaultZone;默认的Value为
http://localhost:8761/eureka,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。如果服务注册中心加
入了安全验证,这里配置的地址格式为:
http://<;username>:<password>@localhost:8761/eureka 其中 <username>为安全校验的用户名,<password> 为该用户的密码

13、eureka.client.fetch-registery
是否从eureka获取注册信息

14、eureka.client.registery-fetch-interval-seconds
从Eureka服务器端获取注册信息的间隔时间,单位:秒

15、eureka.client.register-with-eureka
是否注册自己

16、eureka.client.eureka-server-connect-timeout-seconds
连接 EurekaServer 的超时时间,单位:秒

17、eureka.client.eureka-server-read-timeout-seconds
读取 Eureka Server信息的超时时间,单位:秒

18、eureka.client.filter-only-up-instances
获取实例时是否过滤,只保留UP状态的实例

19、eureka.client.eureka-connection-idle-timeout-seconds Eureka
服务端连接空闲关闭时间,单位:秒

20、eureka.client.eureka-server-total-connections 从Eureka
客户端到所有Eureka服务端的连接总数

21、eureka.client.eureka-server-total-connections-per-host
从Eureka客户端到每个Eureka服务主机的连接总数

3、创建Eureka项目

1、引入依赖

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

2、启动类使用注解

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

3、yml文件配置

server:
  port: 8761
spring:
  application:
    name: eureka-server
eureka:
  client:
    # 关闭注册自己
    register-with-eureka: false
    # 是否从eureka获取注册信息
    fetch-registry: false
    # eureka访问地址
    service-url:
      defaultZone: http://localhost:8761/eureka/
  # 是否开启保护模式,开发模式不需要
  server:
    enable-self-preservation: false

4、启动

console.png

参考:

https://www.jianshu.com/p/bb6ed2ac33ec