服务注册与发现
这段时间打算把springCloud的5大核心模块梳理下,分别为注册中心、配置中心、网关、熔断、负载均衡,本文简单介绍下服务注册发现的原理
1、RPC远程调用框架的核心设计思想在于注册中心,因为注册中心管理服务与服务之间的依赖关系(即服务治理)
2、什么是服务治理
业务背景:订单服务调用会员服务获取用户相关信息
产生的问题:如果未来服务与服务之间的依赖关系非常多的情况下,服务URL管理起来非常复杂,这时可以使用服务治理技术管理每个服务与服务之间的依赖关系
服务治理概念:可以进行本地负载均衡,实现服务发现与注册以及容错等
3、 本地负载均衡
服务调用方获取多个地址后,自己算法判断调用哪个服务
springcloud中支持三种注册中心,分别为Eureka consul zookeeper
dubbo中支持两种注册中心,reids和zookeeper
4、下面重点看下Eureka原理
一般我们将Spring boot应用注册到Eureka Server或者需要从Eureka Server中获取服务列表时,需要做如下三件事情:
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
- 在应用主类中配置@EnableDiscoveryClient注解
- 在application.properties中用eureka.client.serviceUrl.defaultZone参数指定服务注册中心地址
1、看下引入的eureka有哪些自动配置
2、看下Eureka客户端何时何地访问服务端并获取注册中心的服务列表
在EurekaClientAutoConfiguration自动配置类中我们关注下EurekaClient的创建过程
进入构造方法
调用父类构造方法,最终会走向DiscoveryClient类的如下方法
这个方法比较长,我们分几段来看
3.1、首先创建了三个线程池,从名称可以知道,分别是定时、心跳和刷新
3.2 、然后第一次尝试获取注册中心信息
进入方法内部
3.3、从eureka服务器获取完整的注册表信息并将其存储在本地。
3.4、最后触发定时任务
简单看下其中的刷新定时任务
任务执行时会触发run方法
方法中再一次调用fetchRegistry方法
心跳任务
客户端发送心跳
发送心跳时如果状态是404 则客户端进行重新注册
总结:本文主要讲述客户端初始化的过程,下节将继续跟踪下客户端注册和发现的过程