Dalston.RELEASE版本 Eureka 升级为Nacos

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dalston.RELEASE版本 Eureka 升级为Nacos相关的知识,希望对你有一定的参考价值。

参考技术A

当前版本:

因为我们使用的Spring Cloud 版本太低,所以可能出现版本依赖的问题
Nacos 属于Spring Cloud Alibaba 体系,我们参考Spring Cloud 官网的版本对应关系

Spring Cloud的E版本最低也要求1.5的版本,所以我这里只能选在nacos 的版本也为1.5

但是当我启动项目的时候发现报错

就是我们在创建 nacosAutoServiceRegistration 对象时候报错。我们进入该类

NacosAutoServiceRegistration 来自于 spring-cloud-alibaba-nacos-discovery-1.5.0.RELEASE.jar
AbstractAutoServiceRegistration 来自于 spring-cloud-commons-1.2.0.RELEASE.jar.jar
Spring Cloud D版本默认依赖的是 spring-cloud-commons-1.2.0.RELEASE.jar
我们提高一下spring-cloud-commons 的版本再看一下 AbstractAutoServiceRegistration 的构造函数

很明显在更新的版本中增加了一个两个参数的构造函数。

去掉所有Eureka 的配置
spring.cloud.nacos.discovery. server-addr: 192.168.1.10:8905

如果不整体重构我发现我们的项目Eureka 依赖很难去除干净所以我在需要的项目中加入了如下的两个依赖

设置Scope 为test 这样子正式打包的时候就排除掉了Eureka 的依赖, 很取巧但是不可取

下一篇 Nacos 服务监听

F版本SpringCloud 5—Eureka集群和自我保护机制

前言

上篇文章中,通过代码搭建了Eureka注册中心和客户端,是Eureka的简单应用,在本文中将会讲解更多关于Eureka服务端的应用以及原理。

Eureka 自我保护机制

进入自我保护机制的标志【重点】

在使用Eureka的过程中,有时候会在Eureka服务端的页面上看到如下的内容:

F版本SpringCloud 5—Eureka集群和自我保护机制

在监控页面上会看到一行红字儿,这些红字儿什么意思呢?代表着Eureka注册中心进入了自我保护机制。

什么是自我保护机制【重点】

默认情况下,如果Eureka Server在一定时间内没有接受到服务实例的心跳,Eureka将会注销该实例(默认90秒).但是当网络分区发生故障时,微服务客户端和Eureka Server 无法正常通信。以上行为可能变得特别危险了,因为微服务本身是健康的,此时不能注销该服务实例。

Eureka通过自我保护机制来解决这个问题,当Eureka Server在短时间丢失过多的服务实例(可能发生了网络分区的故障),那么Eureka Server进入自我保护模式,一旦进入此模式,Eureka Server将会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不再注销任何的服务实例),当网络故障恢复后,Eureka Server会自动退出自我保护模式。

综上,自我保护模式是一种应对网络故障的安全保护措施,它的架构哲学是宁可同时保留所有的微服务,也不盲目注销任何健康的微服务,使用自我保护模式可以让Eureka,更加健壮,稳定。

一句话:大面积出现客户端失联的时候,Eureka 注册中心进入自我保护模式,不注销任何实例

自我保护机制的配置

在Eureka Server中配置关闭自我保护机制

#关闭自我保护机制  默认开启
eureka.server.enable-self-preservation=false

如果想及时剔除失效的eureka服务除了关闭自我保护机制外,可以调低eureka的心跳值

eureka-server服务端
配置文件中我们添加如下配置

#关闭保护机制,以确保注册中心将不可用的实例正确剔除
eureka.server.enable-self-preservation=false
#(代表是5秒,单位是毫秒,清理失效服务的间隔 )
eureka.server.eviction-interval-timer-in-ms=5000

客户端
配置文件中我们添加如下配置

# 心跳检测检测与续约时间
# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
# 配置说明
#  lease-renewal-interval-in-seconds 每间隔10s,向服务端发送一次心跳,证明自己依然”存活“
#  lease-expiration-duration-in-seconds 告诉服务端,如果我20s之内没有给你发心跳,就代表我“死”了,将我踢出掉。
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=20

注册中心高可用「注册中心集群」

注册中心集群  防止单点故障

Eureka可以通过运行多个实例并互相注册实现高可用部署,Eureka Server实例会彼此同步信息。

创建并配置Eureka集群

1.创建第二个Eureka服务端 eureka-server-8800

F版本SpringCloud 5—Eureka集群和自我保护机制

2.修改pom文件

F版本SpringCloud 5—Eureka集群和自我保护机制

3.创建并修改启动类

package com.lby;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
* @author luxiaoyang
* @create 2020-03-30-20:36
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServer8800 {
public static void main(String[] args) {
SpringApplication.run(EurekaServer8800.class,args);
}
}

4.写配置文件

F版本SpringCloud 5—Eureka集群和自我保护机制

5.修改注册中心eureka-server-8801的配置文件

注册中心之间的基本逻辑是:互相注册

F版本SpringCloud 5—Eureka集群和自我保护机制

此时我们就拥有了一个Eureka注册中心的集群

F版本SpringCloud 5—Eureka集群和自我保护机制

演示注册中心集群的效果

1.启动所有的注册中心和客户端

2.查看Eureka注册中心管理页面

查看注册中心 8800 的管理页面,可以看到客户端可以正常注册

F版本SpringCloud 5—Eureka集群和自我保护机制

查看注册中心 8801 的管理页面,可以看到客户端也可以正常注册

F版本SpringCloud 5—Eureka集群和自我保护机制

3.关闭一个注册中心8800,注册中心8801不受任何影响,整个微服务的集群也不受任何影响,客户端可以正常注册

总结

以上就是Eureka注册中心高可用和自我保护机制的相关内容。

恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

要掌握SpringCloud更多的用法,请持续关注本系列教程。

求关注,求点赞,求转发


以上是关于Dalston.RELEASE版本 Eureka 升级为Nacos的主要内容,如果未能解决你的问题,请参考以下文章

F版本SpringCloud 5—Eureka集群和自我保护机制

没使用Spring Cloud的版本管理导致Eureka服务无法注册到Eureka服务注册中心

SpringCloud Eureka 注册中心

Springboot整合eureka

26 eureka问题汇总

第一篇:服务的注册与发现Eureka(Finchley版本)