1.Eureka包含两个组件

①EurekaServer:提供服务的注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到

②EurekaClient:通过注册中心进行访问

它是一个java客户端,用于简化Eureka Server的交互,(每一个注册好的微服务节点就相当于是一个客户端)客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器。在应用启动后客户端节点将会向EurekaServer发送心跳(默认周期是30秒)。如果EurekaServer在多个心跳周期内没有接收到某个服务节点的心跳,EurekaServer将会从服务注册表把这个服务节点移除(默认90秒)

2.如何使用?

1.建eurekaService模块

①pom文件引入eureka-server依赖(enrekaServer独有的依赖)

②配置文件引入

eureka:

instance:

hostname: localhost #eureka服务端实例名称

client:

#false 表示不向注册中心注册自己 如果需要注册自己,则写true

register-with-eureka: false

#false 表示自己就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 如果不是,则写false

fetch-registry: false

service-url:

#设置与eurekaServer交互的地址查询服务和注册服务都需要依赖这个地址

defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

③启动类添加@EnableEurekaServer注解

备注: 启动后可用ip+该服务的端口进行访问,出来的就是Server端的界面 如:localhost:7001/

2.建eurekaClient模块(服务的注册)

①pom文件引入eureka-client依赖(enrekaClient独有的依赖)

②配置文件引入

eureka:

client:

#表示是否将自己注册进eurekaServer 默认为true

register-with-eureka: true

#表示是否从eurekaServer抓取已有的注册信息,默认为true。单节点的eureka无所谓,集群必须设置为true才能配合ribbon使用负载均衡

fetch-registry: true

service-url:

#设置与eurekaServer交互的地址查询服务和注册服务都需要依赖这个地址

defaultZone: http://localhost:7001/eureka

③启动类添加@EnableEurekaClient注解

备注:启动该服务后,可以在eurekaServer界面application下看到该服务已经注册上来了

3.eureka工作流程

1.服务注册:将服务信息注册进注册中心

2.服务发现:从注册中心获取服务信息(实质:存key服务名 取value调用地址,key value形式 key存服务名字,value存调用地址)

3.具体步骤:

①先启动eureka注册中心

②启动服务提供者,如支付服务

③支付服务启动后,会把自身信息(比如服务调用地址)以别名的方式注册进erureka

④消费者模块,如order服务,在需要调用接口时,使用服务别名去注册中心获取实际的RPC远程调用地址

⑤消费者获取到地址后,底层逻辑是利用HttpClient技术实现远程调用

⑥消费者获得服务调用地址后,会缓存在本地jvm中,默认每间隔30秒更新一次服务调用地址

微服务远程调用最核心的是: 高可用,因此,注册中心不能只有一个,一旦注册中心出现问题,就会出现单点故障,因此需要搭建eureka集群

4.eureka集群搭建步骤

原理:多个eurekaServer相互注册,互相照顾

详细步骤

①建立两个或多个eurekaServer,pom文件都引入eureka-server依赖

②修改本机host文件,使得127.0.0.1映射出两个或多个的域名出来,否则本地搭建eureka集群无法完成

③修改各个enrekaServer的yml文件 eureka配置可参考如下:

eureka:

instance:

hostname: enerka7002.com #eureka服务端实例名称(修改了host文件,eureka7002.com域名映射的是127.0.0.1)

client:

#false 表示不向注册中心注册自己 如果需要注册自己,则写true

register-with-eureka: false

#false 表示自己就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 如果不是,则写false

fetch-registry: false

service-url:

#设置与eurekaServer交互的地址查询服务和注册服务都需要依赖这个地址

#此处为相互注册,注册的是另外一个eurekaServer的地址 达到eureka集群搭建的目的

defaultZone: http://eureka7001.com:7001/eureka/

重点:各个eurekaServer配置文件中的service-url应该相关注册,即应该注册其他eurekaServer的地址,才能相互注册

④启动各个eurekaServer服务,输入其注册地址,看到页面上的ds deplicas栏下其注册的其他eurekaServer节点地址,application可看到注册到上面的微服务节点,即完成集群的搭建

⑤将各个微服务节点注册到我们的eurekaService集群中去,只需修改yml文件中的defaultZone配置,用逗号拼接集群中所有的微服务url即可

⑥启动各服务(先启动我们的eureka集群各服务,然后再启动各服务)

5.微服务节点搭建集群步骤

原理:相同的微服务名称下,对应多个微服务模块,客户端访问时只需要关心注册到eureka的微服务名称,服务调用时采用轮询负载均衡去调用集群中各个微服务模块 详细步骤: ①建立多个微服务模块,服务名称配置成一模一样的,然后注册到eurekaServer中

②调用时采用微服务名称调用方式,因此需要修改调用时的服务地址 比如将 http://localhost:8001/修改为 http://cloud-payment-service/

③TestTemplate服务调用工具配置类中,需要在初始化实例对象的方法上添加 @loadBalanced注解,开启负载均衡功能(默认轮询方式),如果不添加,会直接报错,因为根据微服务名称不知道要调用哪一个

④启动该客户端服务,访问具体接口,可以用特殊的手段验证出,其调用集群中的微服务节点时时交替调用的,先一个后一个这种方式,达到负载均衡目的

备注:搭建集群可以的解决一部分高并发问题

6.eureka的自我保护机制

理论: 当eureka发现注册上来的服务连不上了(网络故障等),很长时间也没有接收到心跳,即使这样,也不会立即把该服务删除(好死不如赖活着),为了高可用。 尝试关闭eureka的自我保护机制(正式情况请慎用!!!) ①eurekaService服务需要修改配置文件:

eureka.server.enable-self-preservation = true

②测试是否关闭:修改eurekaclient服务的配置文件:

#向eurekaServer发送心跳的时间间隔:秒 默认为30秒,此处设置为1秒,为快速实现效果

enreka.instance.lease-renewal-interval-in-seconds = 1

#当eurekaService检测心跳的周期:秒 默认90秒,此处设置为2秒,为快速发现eurekaClient没有发送心跳了,快速实现效果

eureka.instance.lease-expiration-duration-in-seconds = 2

④结果:一当eurekaClient服务关闭了,eurekaServer会立即将其删除

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: