Eureka 是 Netflix 开发的服务发现框架, 本身是一个基于 REST 的服务, 主要用于定位运行在 AWS 域中的中间层服务, 以达到负载均衡和中间层服务故障转移的目的. SpringCloud 将它集成在其子项目 spring-cloud-netflix 中, 以实现 SpringCloud 的服务发现功能.
本文讲解 Eureka 的工作原理, 相关配置, 如何搭建 Eureka 服务
一, Eureka 工作原理
Eureka 包含两个组件: Eureka Server 和 Eureka Client 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 所有节点都宕机, 服务消费者依然可以查询自己缓存中的信息找到去调用服务提供者
二, 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://:@localhost:8761/eureka 其中 为安全校验的用户名; 为该用户的密码
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
连接 Eureka Server 的超时时间, 单位: 秒
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 服务主机的连接总数
三, 创建 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,YAML 文件配置
- 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, 启动
到这里, 整篇文章就结束了, 如果文章中存在有误的地方, 欢迎各位指正哟, 项目源代码地址: SpringCloud-demo
来源: https://yq.aliyun.com/articles/706929