Spring Cloud Netflix Eureka(注册中心)
Eureka简介
Eureka是Netflix开发的一个Service Discovery组件,spring cloud将其整合用来做服务注册中心,Eureka包括两部分Eureka Server 和 Eureka Client
- Eureka Server:服务注册中心,治理注册到eureka server的服务
- Eureka Client:用来和eureka server交互,注册服务

Eureka中有下面几种概念:
- 心跳机制:eureka client定期向eureka server通信,表明自己的存活状态,默认时间30s
- 续约:eureka client 通过心跳机制向注册中心续租,避免自己被eureka server剔除注册信息,可以理解为心跳,说法不一样
- 同步:eureka集群中,server节点会提取其他节点注册信息,保证每个server节点数据一致
- 服务下线:eureka server会定期清理过期服务,也就是在指定时间内没能发送心跳的eureka client
- 自我保护机制:eureka server为了保护服务注册信息的一种处理方式。
默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务Eureka Client与Eureka Server之间无法正常通信,也就是心跳机制不能正常进行,但实际上微服务是处于可用状态,这种情况是不应该删除服务注册列表该服务的注册信息。
Eureka server通过自我保护机制来解决这种问题,当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障,默认15分钟内85%的丢失率,可以自定义配置),那么这个节点就会进入自我保护模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务),自我保护期间某个eureka server节点新注册的服务不会被同步到其他节点,当网络故障恢复后,Eureka client可以通过心跳机制续约,该Eureka Server节点会自动退出自我保护模式。
Eureka自我保护机制是一种应对网络异常的安全保护措施,即使同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不随便注销任何健康的微服务,自我保护机制,可以保证Eureka集群的高可用,CAP三大定理中,与Zookeeper使用的CP不同,Eureka选择保留了AP原则。
Eureka Standalone Mode
eureka的单机模式,在pom引入spring-cloud-starter-netflix-eureka-server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在application.yml做如下配置
eureka:
instance:
hostname: localhost
client:
#不注册自己到eureka serve
registerWithEureka: false
#不提取注册中心的消息
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动eureka一段时间后,如果没有服务注册,会有提示
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
这表明eureka进入自我保护机制,可以配置开启还是关闭。
Eureka Cluster
作为微服务的服务注册中心,首先要保证自己的高可用,如果服务中心挂掉,整个微服务系统都会处于瘫痪状态,eureka在集群中server既是server也是client,server之间会相互注册,复制其他节点的数据,保证eureka的高可用。
eureka的集群模式,在pom引入spring-cloud-starter-netflix-eureka-server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
搭建eureka集群时为了便于区分不同的节点,在hosts文件中做如下映射
# eureka erver
127.0.0.1 eureka-7901
127.0.0.1 eureka-7902
127.0.0.1 eureka-7903
在application.yml做如下配置
spring:
application:
name: eureka-cluster
---
spring:
profiles: eureka-7901
server:
port: 7901
eureka:
instance:
#eureka server通讯地址
hostname: eureka-7901
#显示在注册中心的微服务名称
instance-id: eureka1
#是否显示IP地址
prefer-ip-address: true
#client发送心跳间隔时间 默认30s
lease-renewal-interval-in-seconds: 30
#表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到次心跳,则将移除该instance
lease-expiration-duration-in-seconds: 90
client:
#是否提取服务端注册信息
fetch-registry: true
#是否注册自己
register-with-eureka: true
#eureka server自身作为client时将要注册到的服务端地址
service-url:
defaultZone: http://eureka-7902:7902/eureka/,http://eureka-7903:7903/eureka/
server:
#自我保护机制
enable-self-preservation: true
#eureka server清理无效节点的时间间隔,默认60000毫秒
eviction-interval-timer-in-ms: 60000
---
spring:
profiles: eureka-7902
server:
port: 7902
eureka:
instance:
hostname: eureka-7902
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
instance-id: eureka2
prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7903:7903/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
---
spring:
profiles: eureka-7903
server:
port: 7903
eureka:
instance:
hostname: eureka-7903
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
instance-id: eureka3
prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka-7901:7901/eureka/,http://eureka-7902:7902/eureka/
server:
enable-self-preservation: true
eviction-interval-timer-in-ms: 6000
在idea中启动时,指定启动参数

注意:两个配置启动参数的地方配置一个就可以了
启动ar包可以使用命令
java -jar eureka-server.jar --spring.profiles.active=eureka-7901
在application.yml中register-with-eureka: true将自身注册为eureka server,在defdeaultZone中指定其余eureka server指定除自己外的所有节点,互相注册,每个节点在启动过程中会去请求连接其他节点,因此在初始启动阶段会报错,等所有节点启动稳定后,就会相互注册。
访问http://eureka-7901:7901,可以看到eureka-7901中注册了eureka-7902,eureka-7903,表明互相注册成功

Eureka配置项
Eureka的配置项还是比较多的,如果不明白其中的含义,也就没有办法配置合适的环境,Eureka的配置可以分为三大部分,分别是clien,instance,server,下面列出每一部分常用的配置项说明列表。
Eureka Client
Eureka Instance
Eureka Server
Spring Cloud Netflix Eureka(注册中心)的更多相关文章
- 如何优化Spring Cloud微服务注册中心架构?
作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...
- spring cloud(二)服务(注册)中心Eureka
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
- Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼
Spring Cloud并不与Spring MVC类似是一个开源框架,而是一组解决问题的规范(个人理解).解决哪些问题呢?如下: 1)服务管理:⾃动注册与发现.状态监管 2)服务负载均衡 3)熔断 4 ...
- Spring Cloud Netflix Eureka源码导读与原理分析
Spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究. 本文主要分为四部分,一是对项目构建 ...
- spring cloud(服务注册中心及服务提供者——初学一)
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
- 微服务架构 | 3.1 Netflix Eureka 注册中心
目录 前言 1. Eureka 基础知识 1.1 Eureka 模型中的服务器与客户端 1.2 Eureka 的 30s 启动机制 1.3 Eureka 为什么注册服务的 IP ,而不是主机名 1.4 ...
- Spring Cloud Netflix Eureka client源码分析
1.client端 EurekaClient提供三个功能: EurekaClient API contracts are:* - provide the ability to get Instance ...
- 【系统架构理论】一篇文章精通:Spring Cloud Netflix Eureka
是官方文档的总结 http://spring.io/projects/spring-cloud-netflix#overview 讲解基于2.0.2版本官方文档 https://cloud.sprin ...
- Spring Cloud--搭建Eureka注册中心服务
使用RestTemplate远程调用服务的弊端: Eureka注册中心: Eureka原理: 搭建Eureka服务 引pom 启动类: 启动类上要加上@EnableEurekaServer注解: 配置 ...
随机推荐
- centos8安装lvs
一,配置ip转发 [root@localhost sysctl.d]# sysctl -a | grep ip_forward net.ipv4.ip_forward = 1 说明:如果net.ipv ...
- virtualbox 网络地址转换(NAT)
网络地址转换 虚拟机可以访问主机 通过主机请求外网 但是主机不能请求虚拟机 所以要配置端口转发才行 host-only模式下 不同网段的不同虚拟机也可以互相ping通 比如 192.168.33.1 ...
- sql中的Bulk 导入txt文本
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- PHPStorm注释缩进问题
以下是让强迫症很难受的注释格式 以下几步即可解决强迫症的烦恼 1.点击File 2.点击setting 3.按照以下几步走 4.按照以下几步走 5.最后效果如下
- MSF权限维持
MSF权限维持 环境搭建 目标机:win7 ip:192.168.224.133 攻击机:kali linux ip:192.168.224.129 首先使用web_delivery模块的regsvr ...
- 如何将vscode代码快速同步到github/gitee上
用git实现源代码管理几乎是程序员的必备操作,下面是简单实现流程: 在vscode打开代码所在文件夹 在左侧栏点击源代码管理 初始化存储库 添加远程存储库 输入远程仓库地址(没有仓库的要先建个仓) 输 ...
- vue知识点12
知识点归纳整理如下: 1. 数组用下标改变,或者对象增加属性,这样的改变数据 是不能触发视图更新的,要用 Vue.set(对象,属性,值) 或this.$set(对象,属性,值) 2. this. ...
- Sentinel流控规则
流控规则 注:Sentinel的监控页面一开始是没有东西,需要对监控的服务发起请求后才会出现 资源名:唯一名称,默认请求路径 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个 ...
- OpenTelemetry架构介绍
OpenTelemetry: 经得起考验的工具 摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/ 目录 OpenTele ...
- 设计模式:策略模式(根据参数,调用不同的service接口)
1.定义类容器providers,当spring加载时@PostConstruct(类似构造方法),会先执行init() : 在init()中,反射"cn.jdk18"的所有带自定 ...