java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringCloud的Eureka注册中心

SpringCloud中的Eureka注册中心详细解读

作者:爱敲代码的小楚

这篇文章主要介绍了SpringCloud中的Eureka注册中心详细解读,想要参与服务注册发现的实例首先需要向Eureka服务器注册信息,注册在第一次心跳发生时提交,需要的朋友可以参考下

Eureka原理

概念:实现服务治理,即管理所有的服务信息和状态。 eureka分为两部分,Server端和Client端 Client端向Server端定时发送心跳包。 Server端根据Clinet端的心跳包,来维护一个服务列表(判断服务是否在线)。

1.服务注册

想要参与服务注册发现的实例首先需要向Eureka服务器注册信息 注册在第一次心跳发生时提交

客户端配置选项

#续约发送间隔默认30秒,心跳间隔
eureka.instance.lease-renewal-interval-in-seconds=5
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒
eureka.client.registry-fetch-interval-seconds=5
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=60

服务器端配置选项

#关闭自我保护模式
eureka.server.enable-self-preservation=false
#失效服务间隔
eureka.server.eviction-interval-timer-in-ms=3000

2.Eureka高可用

高可用:可以通过运行多个Eureka server实例并相互注册的方式实现。Server节点之间会彼此增量地同步信息,从而确保节点中数据一致。

写一个地址也行(但是server得互相注册),EurekaServer会自动同步,但为了避免极端情况,还是写多个。 集群中各个server会从其他server同步注册表信息。

#client配置
eureka: 
  client:
    #设置服务注册中心的URL
    service-url:                      
      defaultZone: http://root:root@eureka-7801:7801/eureka/,http://root:root@eureka-7802:7802/eureka/

3.自我保护机制

eureka:
  server: 
    enable-self-preservation: false

4.Eureka 健康检查

server和client通过心跳保持 服务列表,而只有状态为UP的服务才能被访问。看eureka界面中的status。 比如心跳一直正常,服务一直UP,但是此服务DB连不上了,无法正常提供服务(有的时候业务出现问题catch住异常,也可以手动传输DOWN让服务下线)。 此时,我们需要将 微服务的健康状态也同步到server。只需要启动eureka的健康检查就行。这样微服务就会将自己的健康状态同步到eureka。配置如下即可。 开启手动控制 在client端配置:将自己真正的健康状态传播到server。

eureka:
  client:
    healthcheck:
      enabled: true

Client端配置Actuator

	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>

改变健康状态的Service

@Service
public class HealthStatusService implements HealthIndicator{

	private Boolean status = true;

	public void setStatus(Boolean status) {
		this.status  = status;
	}

	@Override
	public Health health() {
		// TODO Auto-generated method stub
		if(status)
		return new Health.Builder().up().build();
		return new Health.Builder().down().build();
	}

	public String getStatus() {
		// TODO Auto-generated method stub
		return this.status.toString();
	}

5.Eureka监听事件

import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class CustomEvent {
	
	@EventListener
	public void listen(EurekaInstanceCanceledEvent e) {
		System.out.println(e.getServerId()+"下线事件");
	}
}

将Eureka Client停止后打印:
api-listen-order:30.136.133.9:port下线事件

6.Eureka缺陷

集群之间的同步复制是通过HTTP的方式进行,基于网络的不可靠性,集群中的Eureka Server间的注册表信息难免存在不同步的时间节点,不满足CAP中的C(数据一致性)。

到此这篇关于SpringCloud中的Eureka注册中心详细解读的文章就介绍到这了,更多相关SpringCloud的Eureka注册中心内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文