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注解: 配置 ...
随机推荐
- linux(centos8):基于java13安装rocketmq-4.7.1(解决jdk不兼容的报错)
一,Rocketmq是什么? 1, RocketMQ是一个队列模型的消息中间件,具有高性能.高可靠.高实时.分布式特点 相比kafka,rocketmq的实时性更强 2,官方网站: http://ro ...
- ansible用user/group模块管理受控机上的用户和组(ansible2.9.5)
一,ansible的user/group模块的用途: ansible的user模块用来实现:生成用户.删除用户等用户的管理ansible的group模块用来实现:生成组.删除组等组的管理 说明:刘宏缔 ...
- 痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2个月了,这一次痞子衡为大家带来了版本升级v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说 ...
- org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest异常解决
使用RocketMQ发送消息抛出异常,异常如下: 原因: Broker 禁止自动创建Topic,且用户没有通过手动创建此Topic,或者broker 和 Nameserver网络不通: 解决方案: 1 ...
- 在电脑上操作手机屏幕scrcpy工具就搞定了
手机安卓版本:10 电脑:win64 使用步骤 电脑步骤 下载scrcpy scrcpy 是免费开源的投屏软件,支持将安卓手机屏幕投放在 Windows.macOS.GNU/Linux 上,并可直接借 ...
- if当中是赋值怎么办
1.Java中,赋值是有返回值的 ,赋什么值,就返回什么值.比如这题,x=y,返回y的值,所以括号里的值是1. 2.Java跟C的区别,C中赋值后会与0进行比较,如果大于0,就认为是true:而Jav ...
- Kubernetes 使用 Ingress 实现灰度发布功能
使用 Ingress 实现灰度发布 一.Canary 规则说明 Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发 ...
- 算法笔记之KMP算法
本文是<算法笔记>KMP算法章节的阅读笔记,文中主要内容来源于<算法笔记>.本文主要介绍了next数组.KMP算法及其应用以及对KMP算法的优化. KMP算法主要用于解决字符串 ...
- mongoDB之C#and.net Driver
之前一直都是用NodeJS来连接操作mongoDB的,但是最近需要用C#操作mongoDB的需要,所以研究了下C#驱动.mongoDB官方在GitHub上提供了C#驱动源码https://github ...
- 14、Cookie和Session组件
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...