首页 > 编程知识 正文

eureka如何实现注册和发现,springcloud原理

时间:2023-05-06 02:46:46 阅读:147254 作者:3975

服务治理机制:体验eureka通过简单的注释配置实现强大的服务治理功能后,了解eureka基础架构中各个元素的通信行为,eureka实现的服务治理系统是如何工作的让我们了解几个重要因素:

"服务注册中心-1"和"服务注册中心-2"相互注册,与高可用性集群注册中心不同

服务提供者实例启动两个实例,每个实例仅在一个服务注册中心注册。

启动两个“服务消费者”实例时,同样只能在一个注册中心注册

通过以上结构,可以详细了解各节点之间的重要通信行为。

服务提供者:服务注册服务提供者通过在启动时发送rest请求,在注册中心注册自己的信息并携带自己的元数据。 注册中心收到这些信息后,将其保存在双重pcdmj结构中。 第一个key是服务名,第二个key是具体服务的实例名。

结构:“key (服务名称)”;“key特定服务的实例名称);“元数据”)

spring.application.name=服务名称

eureka.instance.hostname=服务实例名称

注册时,必须检查eureka.client.register-with-eureka=true参数是否为true。 如果设置为false,则不开始注册操作

服务续约-心跳机制在注册服务后,服务提供者在eureka server注册中心维护心跳,并通过注册中心的“删除任务”将自己从服务列表中排除这种机制称为服务更新。

关于服务更新,有两个重要属性。

eureka.instance.lease-renewal-interval-in-seconds=30; 此参数用于定义服务更新任务的调用间隔,默认值为30秒。

eureka.instance.lease-expiration-duration-in-seconds=90; 此参数用于定义服务禁用的时间,默认值为90秒。

服务同步服务同步的作用是:当注册中心是集群时,注册中心集群或多个注册中心相互注册为服务。 如果服务提供商通过rest请求注册中心时检测到有其他注册中心,它会将请求转发到连接的其他注册中心,以实现注册中心之间的服务同步。 通过服务同步,可以从任何注册中心调用服务提供商的服务信息。

服务消费者启动接受服务的服务消费者后,系统会向注册中心发送一个rest请求,检索服务清单。 注册中心返回只读清单,服务消费者缓存此清单。 然后,这个列表每30秒更新一次,再次去取。

接受服务是服务消费者的基础,因此必须确保eureka.client.fetch-registry=true参数未更改为false。 默认情况下,此值为true。 要更改缓存列表的更新时间,请使用eureka.client.registry-fetch-interval-seconds=30参数。 默认值为30,单位为秒。

服务呼叫服务消费者在获取服务列表后,可以在呼叫时通过服务名称获取服务实例和元数据信息。 因为有这些详细的元数据信息,所以如果需要,可以调用其服务提供者实例。 缺省情况下,功能区在轮询中调用以平衡客户端负载。

对于实例访问选择,eureka有region和zone概念,一个region可以包含多个zone,并且每个服务客户端必须注册到一个zone,因此每个客户端只能注册一个region 进行服务呼叫时,优先访问同一zone内的服务提供者,无法访问时访问其他zone。

脱机服务在系统运行时始终面临关闭或重新启动具有服务的实例的情况,并且不希望在服务关闭时继续调用客户端关闭的实例。 因此,在客户端程序中,当服务实例执行常规关闭操作时,服务脱机rest会向eureka server注册中心请求,并通知服务注册中心“脱机”。 服务端在收到请求后,将该服务的状态设为瘫痪(down ),并传播该瘫痪事件。 注册中心之间的服务同步知道服务客户端已脱机。

服务注册中心: http://www.Sina.com/http://www.Sina.com /在某些情况下,我们的服务实例不一定正常脱机,而是内存溢出、网络故障等问题为了从服务列表中排除无法提供这些服务的实例,eureka server注册中心在启动时创建计划任务,默认情况下每隔固定间隔(60 )创建一次

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

自我保护

            当我们在本地调试eureka时,基本上会碰到这样一i个情况,在服务注册中心的信息面板中出现红色警告:

实际上,该警告就是出发了自我保护机制。之前说过,服务注册到eureka server注册中心之后,会维护一个心跳机制,来告诉eureka server自己还活着。eureka server 注册中心在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况,eureka server会将当前的实例注册信息保护起来,让这些实例不会过期,经可能的保护这些信息。但是,在这段保护期间若实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调试失败的情况,所有客户端必须要有容错机制。比如可以使用请求重试、断路器等机制。

由于本地调试很容易就出发了注册中心的保护机制,这会使得注册中心维护的服务实例不那么准确。所以我们在本地开发的时候,可以使用

eureka. server.enable-self-oreservation=false;关闭保护机制,确保将不可用的实例剔除。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。