热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:(23)Eureka详解

基础架构服务注册中心 服务提供者服
基础架构

  • 服务注册中心 

  • 服务提供者

  • 服务消费者


服务治理

  服务提供者

    服务注册。在服务注册时,需要确认一下eureka.client.registerwith-eurek=ture参数是否正确,默认是true,若设置为false将不会启动注册操作。

    服务同步。两个服务提供者的服务信息是一样的

    服务续约。主要看两个主要属性

#定义服务续约任务的调用间隔时间,默认为30秒
eureka.instance.lease-renewal-interval-in-secOnds=30
#定义服务失效的时间,默认为90秒
eureka.instance.lease-expiration-duration-in-secodes=90


  服务消费者

  获取服务

    当服务消费者启动的时候,会发送一个REST请求给服务注册中心,来获取服务注册清单。为了性能考虑,Eureka Server会维护一份只读的服务清单来返回给客户端,同时该缓存清单会

  每隔30秒更新一次。

    获取服务是服务消费者的基础,所以必须确保eureka.client.fetch-registry=ture(该值默认是true)。可以通过 eureka.client.registry-fetch-interval-secOnds=30参数修改缓存清单的更新时间。

  服务调用

    服务消费者在获取的服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个

  实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。

    对于访问实例选择,Eureka中有Region和Zone的概念,一个Region中可以包含多个Zone,每个服务客户端需要被注册到一个Zone中,所以每个客户端对应一个Region和一个Zone。

  服务下线

    在客户端程序中,当服务实例进行正常的关闭操作时,它会出发一个服务下线的REST请求给Eureka Server,告诉服务注册中心“我要下线了”。服务端在接受到请求后,讲该服务状态置为下线并

  把该下线事件传播出去。

  服务注册中心

  失效剔除

    有时服务实例不是正常下线的,而服务注册中心并未收到“服务下线”的请求。为了从服务列表讲这些无法提供服务的实例剔除,Eureka Server在启动的时候会创建一个定时任务,默认每隔60秒

  将当前清单中超时(默认90秒)没有续约的服务剔除出去。

  自我保护

    在服务注册中心的信息面板中出现类似下面的红色警告信息:

技术分享图片

    实际上,该警告就出发了Eureka Server的自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况Eureka Server会将当前实例注册

  信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。

    在本地调试的时候很容易触发注册中心的保护机制,这会使得注册中心维护的服务实例不那么准确。所以我们再本地进行开发的时候,可以用eureka.server.enable-self-preservation=false参数

  来关闭保护机制,保证注册中心将不可用的实例正确剔除。

 配置详解:

  Eureka客户端的配置主要非为两个方面


  • 服务注册相关的配置信息,包括服务注册中心的地址、服务获取的间隔时间、可用区域等。

  • 服务实例相关的配置信息,包括服务实例的名称、IP地址、端口号、健康检查路径等。

  服务注册类配置:

  指定注册中心:

    eureka.client.serviceUrl.defaultZOne=http://localhost:1111/eureka/

  注册高可用的富足注册中心时:

    eureka.client.serviceUrl.defaultZOne=http://peer1:1111/eureka/,http://peer2/1112/eureka/

  为服务注册中心加入校验:

    eureka.client.serviceUrl.defaultZOne=http://:@localhost:1111/eureka

  服务实例类配置:

  元数据:

    我们可以通过eureka.instance.=的格式对标准化元数据直接进行配置。其中就是EurekaInstanceConfigBean对象中的成员变量名。对于自定义元数据,可以通

  过eureka.instance.metadataMap.=格式进行配置。比如:

    eureka.instance.metadataMap.zOne=shanghai

   实例名配置:

    它是区分统一服务中不同实例的唯一标识。在Netflix Eureka 的原生实现中,实例名采用主机名作为默认值。这样的设置使得在同一个主机上无法穷的那个多个相同的服务实例。在Spring Cloud

  Eureka的配置中,针对同一主机中启动多实例的情况,采用如下默认规则

    ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${SERVER.PORT}}

    对于实例名的命名规则,我们可以通过eureka.instance.instanceId参数来进行配置。虽然可以在命令行中指定不同的server.port来启动,但是还是略显麻烦。我们可以直接通过设置

  server.port=0或者使用随机数server.port=${random.int[10000,19999]}来让Tomcat启动的时候才用随机端口。但是这个时候Eureka Server的实例名都是相同的,这会使得只有一个服务实例能够正常

  体统服务。对于我这个问题,我们就可以通过设置实例名规则来解决:

    erueka.instance.instanceId=${spring.application.name}:${random.int}

 

参考:

 [1] 《SpringCloud微服务实战》,电子工业出版社,翟永超



推荐阅读
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
author-avatar
opheliamaizi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有