什么是Eurake
简单来说就是一个服务注册与发现的中间组件,解决的问题很明显,通过用实例名称来替换IP,防止服务所在节点的IP变化之后,其它服务无法调用的问题。
在Eureka的基本架构中主要有以下三种角色
- Register Service :服务注册中心,它是一个Eureka Server ,提供服务注册和发现的功能。
- Provider Service :服务提供者,它是一个Eureka Client ,提供服务,同时它也可以是一个服务消费者
- Consumer Service :服务消费者,它是一个Eureka Cient ,消费服务,同时它也可以是一个服务提供者。
使用Eurake后,服务间的调用方式发生了一些细微的变化,服务在启动时会向Eureka Server注册自我信息(主要是服务名、IP),当想访问其它服务时,需要先通过服务名从Eurake Server获取对应服务的IP,然后通过IP重新请求。
Eureka相关特性说明
- 集群:作为服务注册中心,Eureka Server通常以集群模式部署,集群之间相互注册,以异步的方式互相复制各自的状态,所以也就存在某时间点,节点间数据临时不一致的情况。
- 客户端缓存:为了避免每次请求都出现两次网络I/O,Eureka Client客户端通常会缓存一份Eurake Server上的服务列表。Client端在注册自身信息的同时,会启动一个定时任务,该任务每隔30秒从Eureka Server上拉取一次服务列表,更新本地缓存。此外为了保证IP变化能被及时发现,Eureka Client会与Eurake Server保持一定的心跳频率,上报自己最新的信息。
- 服务剔除:默认情况下,Eureka Client每隔30秒会向Eureka Server发起一次心跳。如果Eureka Client连续90秒没有向Eureka Server发送心跳,Eureka Server会认为该服务不可用,从而将该服务实例从服务注册列表删除。
- 自我保护机制:如果Eureka Server发现某个服务的连接时断时续,它会认为这可能是网络波动,而因为网络的原因剔除了服务是不合适的。为了应对这种情况,Eureka提供了自我保护机制,如果在短时间内丢失太多的节点,节点会进入自我保护模式。进入保护模式Server保护注册表中的信息,不会去删除服务。网络恢复之后会退出保护模式。使用eureka.server.enable-self-preservation= false 可以禁止自我保护模式。
基于Spring Cloud搭建Eureka集群
集群原理说明:Eureka Server在启动时默认会注册自己成为一个服务,所以Eureka Server也是一个客户端。所以通过配置多个Eureka Server,让他们之间相互注册,就形成了一个集群。当服务提供者向其中一个Eureka注册服务时,这个服务就会被共享到其他Eureka上,这样所有的Eureka都会有相同的服务。
Step01:由于每一个server即是服务端也是客户端,所以需要同时添加client和server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
Step02:先看一下单节点下的配置。
spring:
application:
name: peer1
server:
port: 7001
eureka:
#仪表盘相关配置
environment: local-test
datacenter: local-cloud
dashboard:
path: /dashboard #仪表盘访问地址
enabled: true #默认为true,启用仪表盘
#instance相关配置
instance:
perfer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#client相关配置
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka/ # 注册链接
register-with-eureka: false #是否向Eureka Server注册当前服务,默认为true会注册自己。
fetch-registry: false #是否检查其它Eureka Server节点
initial-instance-info-replication-interval-seconds: 40 #最初复制实例信息到eureka服务器延迟的时间,默认为40秒
instance-info-replication-interval-seconds: 30 #复制实例信息到eureka服务器的间隔时间,默认为30秒
registry-fetch-interval-seconds: 30 #从eureka服务器获取注册信息的间隔时间,默认为30秒
集群情况下,只需要修改上面配置的以下地方:
- 将defaultZone地址指向其它Eureka Server注册中心
- 将register-with-eureka设置为true(默认就是true,所以可以去掉)
- 将fetch-registry设置为true (同上)
- 如果是单机伪集群模式,需要修改端口号
client:
serviceUrl:
defaultZone: http://localhost:7002/eureka/,http://localhost:7003/eureka/ # 注册链接
类似如下:
Step03:在启动类上添加@EnableEurekaServer注解,依次启动所有节点。结果如下
Eureka Server的5种事件监听
- EurekaInstanceCanceledEvent:服务下线事件
- EurekaInstanceRegisteredEvent:服务注册事件
- EurekaInstanceRenewedEvent:服务续约事件
- EurekaRegistryAvaiableEvent: 注册中心启动事件,该事件会在Eureka Server启动完以后马上发布。
- EurekaServerStartedEventEureka:服务端启动事件,该事件会在Eureka Server启动完以后马上发布。
一个简单的监听如下:
@Component
public class EurekaEventListener {
private final static Logger logger = LoggerFactory.getLogger(EurekaEventListener.class);
@EventListener
public void listen(EurekaInstanceCanceledEvent event) {
logger.warn("---服务{}下线", event.getAppName());
//...
}
@EventListener
public void listen(EurekaInstanceRegisteredEvent event) {
InstanceInfo instanceInfo = event.getInstanceInfo();
logger.info("----服务{}注册", instanceInfo.getAppName() + instanceInfo.getHostName() +" "+ instanceInfo.getIPAddr() +" "+ instanceInfo.getPort());
}
@EventListener
public void listen(EurekaInstanceRenewedEvent event) {
logger.info("---服务{}续约", event.getServerId() +" "+ event.getAppName());
}
@EventListener
public void listen(EurekaRegistryAvailableEvent event) {
logger.info("----注册中心启动,{}", System.currentTimeMillis());
}
@EventListener
public void listen(EurekaServerStartedEvent event) {
logger.info("----注册中心服务端启动,{}", System.currentTimeMillis());
}
}
结果如下
今天的文章eureka底层原理详解_微服务架构有哪些[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75599.html