栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringCloud整合Eureka(服务注册之一)

SpringCloud整合Eureka(服务注册之一)

搭建springcloud可以看我的另外一篇博客这里主要讲下Eureka

https://yushun.blog.csdn.net/article/details/122484153

介绍

划重点。。。Eureka目前是停更不停用如果是公司架构选型的话不建议使用Eureka

1.服务注册(register):Eureka Client会通过发送REST请求的方式,向Eureka Server注册自己的服务。注册时,提供自身的元数据,比如ip地址、端口、运行状况指标、主页地址等信息。Eureka
Server接收到注册请求后,就会把这些元数据信息存储在一个双层的Map中。 什么时候注册?在启动微服务的时候。
2.服务续约(renew):在服务注册后,Eureka Client会维护一个心跳来持续通知Eureka Server,说明服务一直处于可用状态,防止被剔除。默认每隔30秒eureka.instance.lease-renewal-interval-in-seconds
发送一次心跳来进行服务续约。
3.获取服务列表(get registry):服务消费者(Eureka Client)在启动的时候,会发送一个REST请求给Eureka Server,获取注册中心的服务清单,并且缓存在客户端本地。同时,为了性能及安全性考虑,Eureka
Server会每隔30秒更新一次缓存中的服务清单。
4.服务调用:服务消费者在获取到服务清单后,可以根据清单中的服务信息,查找到该服务的地址,从而进行访问(远程调用)。
6.服务下线(cancel):当Eureka Client需要关闭或重启时,就不希望在这个时间段内再有请求进来,所以,就需要提前先发送REST请求给EurekaServer,告诉Eureka
Server自己要下线了,Eureka Server在收到请求后,就会把该服务状态置为下线(DOWN),并把该下线事件传播出去。
7.失效剔除(evict):服务实例可能会因为网络故障等原因,导致不能提供服务,而此时该实例也没有发送请求给Eureka Server来进行服务下线。所以,还需要有服务剔除的机制。Eureka
Server在启动的时候会创建一个定时任务,每隔一段时间(默认60秒),从当前服务清单中把超时没有续约(默认90秒eureka.instance.lease-expiration-duration-inseconds)的服务剔除。
8.Eureka保护方式:当在短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。


Eureka自我保护机制配置
eureka-server(application.properties)
自我保护开关(eureka.server.enable-self-preservation: false)
设置时间间隔(eureka.server.eviction-interval-timer-in-ms=2000)


eureka-client(application.properties)
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=90
#Eureka服务端收到最后一次心跳后等待时间上限单位为秒(默认90秒),超时将剔除服务
eureka.instance.lease-expiration-duration-in-seconds=30

eureka-server代码配置 1)首先创建一个model

这里就不多说了可以看下第一篇搭建springcloud的博客,很详细了

2)pom.xml文件中依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server


因为创建的model为注册中心,主要功能是进行服务治理等所以这里需要依赖server

application.properties新增

server.port=7001
#服务注册中心的IP地址
eureka.instance.hostname=localhost
#是否往服务注册中心注册自己
eureka.client.register-with-eureka=false
#是否检索服务
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

注:因为本身为注册中心所以不需要自己注册自己这里为false

最后在启动类上标明自己为server注册中心

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer

启动服务访问 localhost:7001

eureka-client代码配置

这里配置的是指需要注册的微服务比如之前创建的model中的pay和order服务,这里注册pay服务进eureka(注册其他服务配置是一样的)。

1)首先pay服务中引入pom.xml依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

2)修改application.properties文件(这里注意ervice-url为eureka服务的http地址)
#是否往服务注册中心注册自己
eureka.client.register-with-eureka=true
#是否检索服务
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:7001/eureka/

3)修改启动类
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableEurekaClient


启动Eureka和pay模块(先启动Eureka启动成功后再启动pay,因为你注册的话需要先有一个注册中心)

搭建Eureka注册中心集群(实现负载均衡+故障容错)


原理:互相注册,相互守望
这里大概就是需要多少个集群就创建多少个Eureka注册中心model,多个Eureka之间进行相互注册,这样即使挂掉了一个Eureka另外一个Eureka也可以正常使用

和上面的单机版Eureka一样需要改动的代码就是application.properties

1)首先再创建一个单机版的Eureka注册中心微服务 2)application.properties


如果是同一台服务器做集群 eureka.instance.hostname=localhost 需要做一个映射,不同服务器就可以写服务器的ip,如果都用localhost就没有办法区别哪个是哪个了

同一台服务器:
Linux:


这时候就可以在不同的注册服务中心下写上对应的 eureka.instance.hostname

注:win10找到 /ect/hosts 文件更改


启动两个eureka服务随意访问一个端口(7001/7002)如下图说明集群成功

服务注册到eureka集群

这里只需要改需要注册服务的 application.properties 即可
未改动前

改动后

微服务集群搭建(负载均衡)

比如这边需要创建一个pay模块的集群,首先创建一个model如pay2,pay2中的所有配置以及代码都需要和pay模块一致,唯一不同的就是端口号(pay:8001 pay2:8002)
启动后eureka如下

这时候使用order模块调用pay模块

url应改为服务名:


开启RestTemplate负载均衡能力

@LoadBalanced

补充(完善)

配置自定义主机名 application.properties

#配置主机名
eureka.instance.instance-id=xxxxxx



配置主机ip显示 application.properties

#显示主机ip
eureka.instance.prefer-ip-address=true



如果是集群想查看某个服务是否正常



这里的前提是服务依赖了包


    org.springframework.boot
    spring-boot-starter-actuator

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/706859.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号