一:Eureka简介

  Eureka的意思是(因找到某物,尤指问题的答案而高兴) 我发现了,我找到了,作为一个服务注册和发现中心的名字确实很贴切啊。

  Eureka包含两个组件,Eureka Server和Eureka Client,Eureka Server提供服务发现的能力,其实理解为注册更适合,因为Eureka Server不会主动去寻找发现,而是各个微服务启动的时候,向Eureka Server注册自己的信息,例如IP地址,端口号,服务名称等等,Eureka Server会把微服务的信息存储起来。微服务启动之后,会周期性的(默认30s)向Eureka Server发送心跳以续约自己的租期。如果Eureka Server在一定时间内(默认90s)没有收到某个微服务的心跳,则会注销该微服务实例。

  默认情况下,Eureka Server同时也是Eureka Client,多个微服务之间可以通过复制的方式,来实现服务注册表中数据的同步,Eureka Client也会缓存服务注册表中的信息,这样的好处是,不用每次请求都查询Eureka Server,降低了Eureka Server的压力,也降低了请求的延迟。其次,即使Eureka Server宕机了,消费者依然能依靠自己的缓存信息,找到服务提供者,提高了系统的可用性。但是依然存在Eureka Server宕机之后,某些微服务出现不可用情况却无法监测到,Eureka Client的缓存无法更新,影响系统的可用性。所以要使用集群让Eureka Server具有高可用性。

二:Eureka Server

  1、引入Eureka依赖:spring-cloud-starter-eureka-server

  2、在启动类添加注解:EnableEurekaServer

  3、配置文件:

#单机配置
server:
port: 8761
eureka:
client:
#是否将自己注册在Server上,默认true,由于当前应用是Server,所以设为false
registerWihEureka: false
#是否需要从Server获取注册信息,默认true,由于当前Server是单节点,不需要同步注册信息,所以设为false
fetchRegistry: false
serviceUrl:
#与Eureka Server交互的地址,服务注册和查询都依赖这个地址,默认的地址是http://localhost:8761/eureka/,多个地址可以使用,号隔开
defaultZong: http://localhost:8761/eureka/ #集群配置
#是否注册到Server和是否从Server上获取注册信息都是用默认的true
spring:
application:
name: microserver-discovery-eureka-ha
server:
port: 8761
eureka:
instance:
hostname: peer1
client:
serviceUrl:
#另一个注册中心的地址
defaultZong: http://localhost:8762/eureka/

Server配置

三、服务注册

  1、引入Eureka依赖:spring-cloud-starter-eureka

  2、在启动类添加注解:@EnableDiscoveryClient 或@EnableEurekaClient

  3、配置文件:

#是否注册到Server和是否从Server上获取注册信息都是用默认的true
spring:
application:
#指定注册到Server的应用名称
name: microserver-provider-user
eureka:
instance:
#将自己的ip地址注册到Server,如果不配置或者设为false,则标识注册微服务所在的hostname到Server
prefer-ip-address: true
client:
serviceUrl:
#注册中心的地址,多个地址用英文逗号隔开
defaultZong: http://localhost:8762/eureka/

Client配置

四:为Eureka Server添加用户认证

  1、添加spring-boot-starter-security依赖

  2、配置文件:

#Server配置
#如果不设置这段内容,默认账户是user,密码是随机值,会在启动时打印出来
security:
basic:
enable: true #开启基于HTTP basic的认证
user:
name: user
password: password12 #Client配置
eureka:
client:
serviceUrl:
defaultZong: http://user:password12@localhost:8761/eureka/

配置文件

五:元数据

  Eureka的元数据有两种:标准元数据和自定义元数据
  标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。
  自定义元数据:可以使用eureka.instance.metadata-map配置,这些元数据可以在远程客户端中访问,但是一般不改变客户端行为,除非客户端知道该元数据的含义

六:Eureka server REST端点

  很多REST端点,我的理解是,主要用于其他语言的微服务或者页面调用操作Eureka的,比如注册发现注销,查看当前某个或所有微服务实例。这个可以用的时候再去了解需要用的那个接口。

七:Eureka的自我保护模式

  默认情况下,Eureka Server在90秒内没有收到某个微服务的心跳,就会注销该微服务,但是,当网络分区发生故障的时候,多个微服务与Server无法正常通信,注销行为就显得比较危险了,因为微服务本身其实是可用的,而且在相关微服务没有宕机的情况下,服务注册表中的信息也没有变动,缓存也不需要更新。直接注销掉多个微服务会导致系统可用性下降。

  所以,Eureka通过“自我保护模式”来解决这个问题,当Eureka Server在短时间内丢失过多客户端时,这个节点就会进入自我保护模式,保护服务注册表中的信息,不在删除服务注册表中的数据,也就是不会注销任何微服务,当网络故障恢复后,该节点会自动退出自我保护模式。

  自我保护模式是宁可保留不健康的微服务,也不盲目注销掉健康的微服务,在spring Cloud中,可以使用eureka.servrer.enable-self-preservation =  false禁用自我保护模式。

八:多网卡环境下的ip选择

  对于多服务器网卡,某些情况需要指定IP,将指定IP注册到Eureka Server上,保证微服务的可用性。spring cloud提供了按需选择IP的能力。

  1:按名称忽略网卡

#按名称忽略网卡
#忽略docker0网卡和veth开头的网卡
spring:
cloud:
inetutils:
ignored-interfaces:
- docker0
- veth.*
eureka:
instance:
prefer-ip-address: true #使用正则表达式指定ip地址
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0
eureka:
instance:
prefer-ip-address: true #只使用站点本地网址
spring:
cloud:
inetutils:
useOnlySitelocalInterfaces: true
eureka:
instance:
prefer-ip-address: true #手动指定ip地址
eureka:
instance:
prefer-ip-address: true
ip-adress: 127.0.0.1

配置IP选择

九:Eureka的健康检查

  在Eureka首页,可以在status栏看到微服务的运行情况,应用状态有UP,DOWN,OUT_OF_SERVICE,UNKNOWN四个状态,只有标记UP的微服务才会被请求。但是标记UP的微服务并不一定正常,比如数据源发生问题,并不能正常工作。不是UP的微服务也不一定有问题,比如只是因为网络原因,无法向Server发送心跳导致被注销。

  要更真实的了解微服务的健康状态,需要启用Eureka的健康检查,这样,微服务就会将自己的健康状态传播到Server。这个健康检查也只能确定UP状态的微服务是否真的正常运行。开启健康检查需要在微服务配置:

eureka:
client:
helathcheck:
enable: true

开启健康检查

  在某些场景下,可能需要更细粒度的健康检查,可以通过实现com.netflix.appinfo.Health-CheckHandler接口

服务注册与发现—Eureka的更多相关文章

  1. Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】

    Spring Cloud(二):服务注册与发现 Eureka[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  上一篇主要介绍了相关理论,这一篇开始我们 ...

  2. spring cloud 学习之 服务注册和发现(Eureka)

    一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...

  3. 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战

    笔记 5.服务注册和发现Eureka Server搭建实战     简介:使用IDEA搭建Eureka服务中心Server端并启动,项目基本骨架介绍          官方文档:http://clou ...

  4. springcloud~服务注册与发现Eureka的使用

    服务注册与发现是微服务里的概念,也是一个基本的组件,负责服务组件的认证,即实现『你是谁』的功能,在服务注册与发现里,存在两种模式,即服务端发现和客户端发现,咱们今天说的eureka属于客户端发现! 下 ...

  5. SpringCloud学习笔记:服务注册与发现Eureka(2)

    1. Eureka简介 Eureka是一个用于服务注册和发现的组件,分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中心,Eureka Cl ...

  6. Spring Cloud实践之服务注册与发现Eureka

    一.简述: 服务提供者producer与服务消费者consumer都注册到eureka server,然后服务consumer在其应用内直接调用producer的服务名来调用服务,而不是像之前一样调用 ...

  7. SpringCloud 学习(二) :服务注册与发现Eureka

    Spring Cloud应用中可以支持多种的服务治理框架,比如Eureka.Consul.Zookeeper等,现在我们用的是consul,本文以SpringCloud Dalston.SR5版本介绍 ...

  8. 微服务注册与发现 —— eureka

    基础概念 在微服务系统中,服务的注册和发现是第一步,常用的有: Eureka:https://github.com/Netflix/eureka Zookeeper:https://zookeeper ...

  9. 白话SpringCloud | 第三章:服务注册与发现(Eureka)-下

    前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例.而在实际生产或者在这种微服务架构的分布式环境中,需要考虑发生故障时,各组件的高可用.而其实高可用,我的简单粗俗理解就是,通过系 ...

  10. 白话SpringCloud | 第二章:服务注册与发现(Eureka)-上

    前言 从本章节开始,正式进入SpringCloud的基础教程.从第一章<什么是SpringCloud>中我们可以知道,一个微服务框架覆盖的东西是很多的,而如何去管理这些服务或者说API接口 ...

随机推荐

  1. Linux文件与文件夹的权限问题

    0x01 修改文件可读写属性的方法 例如:把index.htm 文件修改为可写可读可执行: chmod 777 index.htm 要修改目录下所有文件属性可写可读可执行: chmod 777 *.* ...

  2. Windows和Linux下putenv()函数导致composer更新失败

    bug复现: 原因: putenv() 函数设置特定的环境变量有可能是一个潜在的安全漏洞,所以这个函数在php配置文件中是默认禁止的,在 php.ini 中查找此函数,然后将此函数删除掉,重载配置即可 ...

  3. python 设计模式之适配器模式 Adapter Class/Object Pattern

    #写在前面 看完了<妙味>和<华医>,又情不自禁的找小说看,点开了推荐里面随机弹出的<暗恋.橘生淮南>,翻了下里面的评论,有个读者从里面摘了一段自己很喜欢的话出来, ...

  4. 高性能计算 —— 中国金融服务业创新发展的助推剂 & 微软

    “高性能计算 —— 中国金融服务业创新发展的助推剂“六大盘点 - 微软 - 博客园https://www.cnblogs.com/stbchina/archive/2011/12/02/HPC-in- ...

  5. flutter 权限申请

    添加依赖 permission_handler: ^3.2.2 androidmanifest.xml添加对应的用户权限 在flutter 中app入口申请权限: import 'package:fl ...

  6. flutter 页面布局 Paddiing Row Column Expanded 组件

    Flutter Paddiing 组件 在 html 中常见的布局标签都有 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属 性.这个时候我们可以用 Pad ...

  7. ISO/IEC 9899:2011 条款6.5.4——投射操作符

    6.5.4 投射操作符 语法 1.cast-expression: unary-expression (    type-name    )    cast-expression 约束 2.除非类型名 ...

  8. 0.9.0.RELEASE版本的spring cloud alibaba sentinel+feign降级处理实例

    既然用到了feign,那么主要是针对服务消费方的降级处理.我们基于0.9.0.RELEASE版本的spring cloud alibaba nacos+feign实例添油加醋,把sentinel功能加 ...

  9. Spring cloud微服务安全实战-5-8实现基于session的SSO(认证服务器的session有效期)

    认证服务器 session的有效期. 也就是认证服务器上的session的有效期 生成环境下,认证服务器一定是一个集群.集群.那么session一定是要在所有的服务器之间进行共享的.最简单的方式是用S ...

  10. iOS App Store网址的命名规则

    App Store 命名规则:https://itunes.apple.com/cn/app/ +  拼音(最多6个,全部小写,空格要-) +  /id  +appID 一些参考实例: http:// ...