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会立即将其删除
版权归原作者 小新丹 所有, 如有侵权,请联系我们删除。