前言
在上一篇文章中,我们构建了一个微服务框架,并使用了服务治理(SOA ) Eureka
参考: Eureka注册中心
本文教您如何使用IDEA构建SpringCloud群集。 Spring有最简单的集群构建方法
一.使用IDEA
选择新建
二.部署
写下你配置的名字,01,02分区就可以了。 然后,对该模块进行聚类
三.端口号
-Dserver.port=10087
d是修改,必须写
四.启动项目
这就完成了两个Eureka项目
我们的yaml配置是
所以Eureka不显示有服务注册
两者都更改为true或删除,修改后重新启动:
五、客户端向集群注册服务
由于有多个EurekaServer,因此在注册服务时必须更改服务- URL参数。
eureka:
客户端:
service-url: # EurekaServer地址,多个地址用','分隔
efault zone :3358127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka
5.1服务提供者
服务提供者必须在EurekaServer上注册服务,并完成服务更新等工作。
服务注册
服务提供器在启动时检测配置属性的" eureka.client.register-with-eru eka=true "参数是否正确,实际上缺省为true。 如果值为true,则将向EurekaServer发送Rest请求,并发送自己的元数据信息。 EurekaServer将这些信息存储在双重映射结构中。 第一层地图的密钥是服务名,第二层地图的密钥是服务的实例id。
更新服务
注册服务完成后,服务提供者会保持定期向EurekaServer发送Rest请求的心跳,并告诉EurekaServer“我还活着”。 这称为服务更新(renew );
更改服务更新的行为有两个重要参数:
eureka:
instance:
第二次世界大战336090
lease-renewal-in-seconds 336030
延迟间隔:服务更新(renew )的间隔,默认值为30秒
lease-expiration-duration-in-seconds :服务过期,默认值为90秒
也就是说,默认情况下,服务每隔30秒向注册中心发送一次心跳,以证明自己还活着。 如果90秒以上未发送心跳,EurekaServer将确定服务已停止,并将其从服务列表中删除。 这两个值在生产环境中不更改,默认情况下也可以。
但是在开发时,这个值有点太长了。 如果经常关闭服务,就会发现Eureka仍然认为服务是活着的。 所以我们可以在开发阶段适当缩小。
eureka:
instance:
lease-expiration-duration-in-seconds 33602 # 2秒过期
lease-renewal-interval-in-seconds 33601 # 1秒心跳1次
实例id
让我们先看看服务的状态信息。
在Eureka监视页面上,确认服务注册信息。
status列显示以下信息:
up(1) :表示当前已启动一个样本,没有集群
桌面-2mvec 12:用户服务33608081 :是示例的名称(实例- id ),
默认格式为$ { hostname } $ { spring.application.name } $ { server.port }
实例- id是区分同一服务的不同实例的唯一标准,因此不能重复。
可以使用instance-id属性更改配置。
eureka:
instance:
instance-id : $ { spring.application.name } : $ { server.port }
重新启动服务并重试:
6.
4.4.服务消费者获取服务列表
当服务消费者启动是,会检测eureka.client.fetch-registry=true参数的值,如果为true,则会从Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。我们可以通过下面的参数来修改:
eureka:
client:
registry-fetch-interval-seconds: 5
生产环境中,我们不需要修改这个值。
但是为了开发环境下,能够快速得到服务的最新状态,我们可以将其设置小一点。
6.4.5.失效剔除和自我保护
失效剔除
有些时候,我们的服务提供方并不一定会正常下线,可能因为内存溢出、网络故障等原因导致服务无法正常工作。Eureka Server需要将这样的服务剔除出服务列表。因此它会开启一个定时任务,每隔60秒对所有失效的服务(超过90秒未响应)进行剔除。
可以通过eureka.server.eviction-interval-timer-in-ms参数对其进行修改,单位是毫秒,生成环境不要修改。
这个会对我们开发带来极大的不便,你对服务重启,隔了60秒Eureka才反应过来。开发阶段可以适当调整,比如10S
自我保护
我们关停一个服务,就会在Eureka面板看到一条警告:
这是触发了Eureka的自我保护机制。当一个服务未按时进行心跳续约时,Eureka会统计最近15分钟心跳失败的服务实例的比例是否超过了85%。在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。
但是这给我们的开发带来了麻烦, 因此开发阶段我们都会关闭自我保护模式:
在eureka的yml文件中配置
eureka:
server:
enable-self-preservation: false# 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 1000# 扫描失效服务的间隔时间(缺省为60*1000ms)
原理图
下一篇文章 负载均衡
祝你幸福
送你一首歌:《夢灯籠》 RADWIMPS 附一版MV 《你的名字》MV 新海诚
附图:《你的名字》