Spring Cloud入门—Eureka介绍

注册中心 eureka

Eureka是spring cloud 中的注册中心,类似于Dubbo中的Zookeeper,

什么是注册中心,为什么需要注册中心

 

eureka搭建

Eureka本身是使用java开发的,springcloud使用springboot技术对Eureka进行了封装,所以在springCloud中使用Eureka非常方便,只需引入spring-cloud-start-Netflix-eureka-server这个依赖即可,

然后就像启动一个普通的springboot项目一样启动eureka即可

 

1、创建一个普通的springboot项目,导入eureka依赖

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

然后在项目启动类上添加@EnableEurekaServer注解 表示开启eureka功能

2、在properties文件中添加配置信息

#给当前服务起一个名字
spring.application.name=eureka
#设置端口号
server.port=1111
#默认情况下,Eureka server也是一个微服务,所以当他还是一个注册中心的时候,他会有两层身份:1、注册中心
#2、普通服务,即当前服务回把自己注册到自己上面来
#eureka.client.register-with-eureka设置为false表示当前服务不要注册到注册中心上
eureka.client.register-with-eureka=false
#表示是否从eureka server 上获取注册信息
eureka.client.fetch-registry=false

eureka集群搭建

使用了注册中心之后,所有的服务都需要通过服务注册中心来进行信息交换。服务注册中心的稳定性就非常重要了一旦服务注册中心掉线,会影响整个系统的稳定性。所有在实际开发当中,Eureka一般都是以集群的形式出现的。

Eureka集群,实际上就是启动多个Eureka实例,多个Eureka实例之间,相互注册,互相同步数据,共同组成一个Eureka集群

搭建Eureka集群,

1、首先需要一点准备工作,修改电脑的host文件:

文件路径:C:\Windows\System32\drivers\etc\hosts

添加以下内容

127.0.0.1 eurekaA eurekaB

2、在之前搭建好的Eureka server基础上 在添加两个配置文件分别为 application-a.properties和

application-b.properties

application-a.properties内容:

#给当前服务起一个名字
spring.application.name=eureka
#设置端口号
server.port=1111
#给服务起别名,注册到注册中心
eureka.instance.hostname=eurekaA
#默认情况下,Eureka server也是一个微服务,所以当他还是一个注册中心的时候,他会有两层身份:1、注册中心
#2、普通服务,即当前服务回把自己注册到自己上面来
#eureka.client.register-with-eureka设置为false表示当前服务不要注册到注册中心上
eureka.client.register-with-eureka=true
#表示是否从eureka server 上获取注册信息
eureka.client.fetch-registry=true
#A服务要注册到B服务上
eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka

application-b.properties内容:

#给当前服务起一个名字
spring.application.name=eureka
#设置端口号
server.port=1112
#给服务起别名,注册到注册中心
eureka.instance.hostname=eurekaB
#默认情况下,Eureka server也是一个微服务,所以当他还是一个注册中心的时候,他会有两层身份:1、注册中心
#2、普通服务,即当前服务回把自己注册到自己上面来
#eureka.client.register-with-eureka设置为false表示当前服务不要注册到注册中心上
eureka.client.register-with-eureka=true
#表示是否从eureka server 上获取注册信息
eureka.client.fetch-registry=true
#B服务要注册到A服务上
eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka

3、配置完成后,将项目打包(打成jar包)

打包完成后在命令行启动两个Eureka实例

两个实例的启动命令分别为:

java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b

启动成功后就可以看到两个服务之间相互注册,共同组成一个集群

 

eureka工作细节

eureka本身可以分为两个部分,Eureka Server和Eureka Client

Eureka Server

eureka Server主要对外提供三个功能:

1.服务注册,所有的服务都要注册到Eureka Server上面来

2.提供注册表,注册表就是所有注册上来的服务的一个列表,Eureka Client在调用服务时,需要获取这个注册表,一般来说这个注册表会缓存下来,如果缓存失效,则获取最新的注册表

3.同步状态,Eureka Client通过注册、心跳等机制,和Eureka Server同步当前客户端的状态

Eureka Client

Eureka CLient 主要是用来简化每一个服务和Eureka Server之间的交互。Eureka Client会自动拉取、更新及缓存Eureka Server中的信息,即使Eureka Server 所有节点都宕机,Eureka Client 依然能够获取到想要调用的服务地址(但是地址可能不准确)

 

服务注册

服务提供者将自己注册到服务注册中心(Eureka Server),需要注意,所谓的服务提供者,只是业务上的划分,本质上他就是一个Eureka Client。当Eureka Client向Eureka Server注册时,他需要提供自身的一些元素数据,例如ip地址、端口号、名称、运行状态等

 

服务续约

Eureka Client注册到Eureka Server上之后,事情没有结束,刚刚开始而已。注册成功后,默认情况下 , Eureka Client 每个30秒就要向Eureka Server 发送一条心跳信息,来告诉Eureka Server 我还在运行。如果Eureka Server 连续90秒都没用收到Eureka CLient的续约消息(连续三次没有发送),他会认为Eureka Client已经掉线了,会将掉线的Eureka Client从当前服务注册列表中剔除

服务续约有两个先关属性(一般不建议更改):

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90

-eureka.instance.lease-renewal-interval-in-seconds 表示服务的续约时间,默认30秒

-eureka.instance.lease-expiration-duration-in-seconds 表示服务失效时间,默认90秒

 

服务下线

当Eureka Client下线时,他会主动发送一条消息,告诉Eureka Server ,我下线了

获取注册表信息

Eureka Client 从Eureka Server 上获取服务的注册信息,并将其缓存在本地,本地客户端在调用远程服务时,会从该信息中查找远程服务所对应的Ip地址、端口号等信息。Eureka Client 上缓存的服务注册信息会定期更新(30秒),如果Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client会自动处理。

这里也涉及到两个属性,一个是是否允许获取注册表信息:

#表示是否从eureka server 上获取注册信息
eureka.client.fetch-registry=true

Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认30秒

eureka.client.registry-fetch-interval-seconds=30

 

 

Eureka 集群原理

官方的一张集群架构图

 

在这个集群架构中,Eureka Server 之间通过Replicate 进行数据同步,不同的Eureka Server之间不区分主从节点,所有节点之间都是平等的。节点之间通过置顶serviceUrl来互相注册,形成一个集群,进而提高节点可用性。

在Eureka Server集群中,如果有一个节点宕机,Eureka Client会自动切换到新的Eureka Server上。每一个Eureka Server 节点,都会互相同步数据。Eureka Server 的连接方式,可以是单线的,就是 A-->B-->C,此时A的数据也会和C之前互相同步。但是一般来说,不建议这种写法,在我们配置serviceUrl时,可以指定多个注册地址,即A可以即注册到B上,也可以同时注册到C上。

 

Eureka分区:

1.region:地理上的不同区域

2.zone:具体的机房

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值