Spring Cloud中Eureka的使用

Eureka

Eureka是Spring Cloud框架中的服务注册与发现组件。

Eureka原理

在这里插入图片描述

Eureka的使用

Eureka服务器
功能
  1. 服务注册表:记录各个微服务信息,例如服务名称,ip,端口等。
  2. 注册表提供查询API(查询可用的微服务实例)和管理API(用于服务的注册和注销)。
  3. 服务注册与发现:注册:将微服务信息注册到注册中心;发现:查询可用微服务列表及其网络地址
  4. 服务检查:定时检测已注册的服务,如发现某实例长时间无法访问,就从注册表中移除。
配置使用

1.配置pom文件

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.配置application.properties或者application.yaml

#是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息,如果是eureka服务器集群的配置那么采用默认即可,方便其向其他服务器获取信息
eureka.client.register-with-eureka=false
#是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
eureka.client.fetch-registry=false
#设置服务注册中心的URL,用于client和server端交流,集群配置,应该设为其他的服务器地址,来获取其他服务器上的服务信息
eureka.client.service-url.defaultZone=http://localhost:7900/eureka/

3.启动类上添加此注解标识该服务为配置中心@EnableEurekaServer
4.可以启动服务器,提供服务

Eureka客户端

客户端可以既是服务消费者也可是服务提供者。

功能
  1. 注册:每个微服务启动时,将自己的网络地址等信息注册到注册中心,注册中心会存储(内存中)这些信息。
  2. 获取服务注册表:服务消费者从注册中心,查询服务提供者的网络地址,并使用该地址调用服务提供者,为了避免每次都查注册表信息,所以client会定时去server拉取注册表信息到缓存到client本地。
  3. 心跳:各个微服务与注册中心通过某种机制(心跳)通信,若注册中心长时间和服务间没有通信,就会注销该实例。
  4. 调用:实际的服务调用,通过注册表,解析服务名和具体地址的对应关系,找到具体服务的地址,进行实际调用。
配置使用

1.pom文件

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.application.properties

#是否将自己注册到其他Eureka Server,默认为true 需要
eureka.client.register-with-eureka=true
#是否从eureka server获取注册信息, 需要
eureka.client.fetch-registry=true
#设置服务注册中心的URL,用于client和server端交流
#此节点应向其他节点发起请求
eureka.client.serviceUrl.defaultZone=http://localhost:7900/eureka/
#主机名,必填
eureka.instance.hostname=localhost
#web端口,服务是由这个端口处理rest请求的
server.port=7901

3.可以发起远程请求

Eureka的自我保护机制

1.Eureka在CAP(一致性、可用性,分区容错性)理论当中是属于AP , 也就说当产生网络分区时,Eureka保证系统的可用性,但不保证系统里面数据的一致性,默认开启自我保护机制,服务器端容错的一种方式,即短时间心跳不到达仍不剔除服务列表里的节点。
2.默认情况下,Eureka Server在一定时间内,没有接收到某个微服务心跳,会将某个微服务注销(90S)。但是当网络故障时,微服务与Server之间无法正常通信,上述行为就非常危险,因为微服务正常,不应该注销。
3.Eureka Server通过自我保护模式来解决整个问题,当Server在短时间内丢失过多客户端时,那么Server会进入自我保护模式,会保护注册表中的微服务不被注销掉。当网络故障恢复后,退出自我保护模式。

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

使用Spring Boot2.x Actuator监控应用

该功能完成服务的监控,简单来说就是收集服务的一些详细信息,比如服务是否正常等状态信息,配置在服务的提供者上。
1.开启监控

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

2.在application.properties配置文件中开启端点,端点即某一个状态信息,一个服务包含许多的状态信息,需要监控什么信息,即打开哪个端点

#开启所有端点
management.endpoints.web.exposure.include=*

3.然后可通过http请求的方式获取对应端点的信息

健康检查

由于server和client通过心跳保持服务状态,而只有状态为UP的服务才能被访问,eureka服务器的面板上就可以看到服务的status,有UP 和DOWN。比如心跳一直正常,服务一直UP,但是此服务DB连不上了,无法正常提供服务。此时,我们需要将微服务的健康状态也同步到server,只需要启动eureka的健康检查就行,这样微服务就会将自己的健康状态同步到eureka。

客户端配置如下,将自己的真正健康信息传到服务器:

eureka.client.healthcheck.enabled=true

注: 同时Client端需要配置Actuator

安全配置

Eureka支持安全配置,即在访问Eureka服务器时需要进行安全方面的验证,如登录。
注:
如果出现服务注册报错:Root name ‘timestamp’ does not match expected (‘instance’) for type [simple,这是因为默认开启了防止跨域攻击,可在服务端增加如下配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		// TODO Auto-generated method stub
		http.csrf().disable();
		super.configure(http);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值