JAVA开发(分布式部署微服务注册到Eureka出现registration status: 204错误)

news2024/10/6 14:28:33

问题背景:

将服务注册到多个Eureka出现有点的服务只注册到一个Eureka有点的服务可以注册到多个Eureka的问题,有的注册不上,报错:registration status: 204

Eureka界面:

Eureka1:

Eureka2:

 从截图可以看出有两台服务器上的HN-BASE-ADMIN 和HN-BLOCKCHAIN-BUSINESS都可以注册到Eureka1

HN-BASE-GATEWAY分别都只有一台服务器上的微服务注册成功。

日志报错::registration status: 204

我们先了解Eureka的工作原理:

 简要介绍:

Eureka 是 Netflix 出品的用于实现服务注册和发现的工具,Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现
Eureka采用C-S的设计架构,包含Eureka Server 和Eureka Client两个组件

基本工作原理:

Applecation-server :服务提供者
Application-cliene:服务消费者
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。

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)的服务剔除。

服务端配置:

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false #false表示不向注册中心注册自己。
    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka1.com:7002/eureka/,http://eureka2.com:7003/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。

单机模式配置:

#--------------------------单机模式--------------------------#
#eureka:
#  instance:
#    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
#    prefer-ip-address: true
#    ip-address: localhost
#    #服务续约(renew)的间隔,默认为30秒
#    lease-renewal-interval-in-seconds: 30
#    #服务失效时间
#    lease-expiration-duration-in-seconds: 90
#  server:
#    # 设置eureka是否启动自我保护   true指开启eureka的自我保护   false指关闭eureka的自我保护
#    # 如果关闭eureka的自我保护,则不可用的服务会被及时剔除掉
#    enable-self-preservation: false
#    # 剔除服务的时间间隔毫秒数(单位:毫秒)  扫描失效服务的时间间隔(默认是60*1000 即60秒)
#    eviction-interval-timer-in-ms: 5000
#
#  client:
#    register-with-eureka: false # 表示是否向Eureka注册中心注册自己
#    fetch-registry: false # 如果为false 则表示自己为注册中心
#    service-url:
#      defaultZone: http://localhost:8762/eureka/

集群模式模式配置:

#--------------------------集群模式--------------------------#
eureka:
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
    prefer-ip-address: true
    ip-address: 10.13.10.6
    #服务续约(renew)的间隔,默认为30秒
    lease-renewal-interval-in-seconds: 30
    #服务失效时间
    lease-expiration-duration-in-seconds: 60
  server:
    # 设置eureka是否启动自我保护   true指开启eureka的自我保护   false指关闭eureka的自我保护
    # 如果关闭eureka的自我保护,则不可用的服务会被及时剔除掉
    enable-self-preservation: false
    # 剔除服务的时间间隔毫秒数(单位:毫秒)  扫描失效服务的时间间隔(默认是60*1000 即60秒)
    eviction-interval-timer-in-ms: 5000

  client:
    register-with-eureka: true # 表示是否向Eureka注册中心注册自己
    fetch-registry: true # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: ${app.eureka.defaultZone} #注册的注册中心集群配置

其中{app.eureka.defaultZone} 通过外部配置注入,这个的配置需要指定IP,最好不要用hosts映射域名。

如:

http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

应该直接指定域名:

http://10.13.13.8:8761/eureka/,http://10.13.13.7:8761/eureka/

问题解决:

注意!!!!

如果使用域名映射就会出现 registration status: 204,使用http://10.13.13.8:8761/eureka/,http://10.13.13.7:8761/eureka/ 就可以全部注册上了

随便介绍一下eureka与nacos的区别

Nacos与eureka的共同点

都支持服务注册和服务拉取

都支持服务提供者心跳方式做健康检测

Nacos与Eureka的区别

Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

临时实例心跳不正常会被剔除,非临时实例则不会被剔除

Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

1、范围不同。

Nacos的阈值是针对某个具体Service的,而不是针对所有服务的;但Eureka的自我保护阈值是针对所有服务的。nacos支持CP和AP两种;eureka只支持AP。nacos使用netty,是长连接;eureka是短连接,定时发送

2、保护方式不同。

Eureka保护方式:当在短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enable-self-preservation: false)。

Nacos保护方式:当域名健康实例(Instance)占总服务实例(Instance)的比例小于阈值时,无论实例(Instance)是否健康,都会将这个实例(Instance)返回给客户端。这样做虽然损失了一部分流量,但是保证了集群的剩余健康实例(Instance)能正常工作。

3、连接方式不同。

nacos支持动态刷新,在控制器(controller)上加@RefreshScope注解即可,采用Netty连接,是长连接;eureka本身不支持动态刷新,需要配合MQ完成动态刷新,且是短连接,是定时发送。

Nacos中的CAP模式切换

Nacos 支持 AP 和 CP 模式的切换,这意味着 Nacos 同时支持两者一致性协议。这样,Nacos能够以一个注册中心管理这些生态的服务。不过在Nacos中,AP模式和CP模式的具体含义,还需要再说明下。

AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。AP 模式是在网络分区下也能够注册实例。在AP模式下也不能编辑服务的元数据等非实例级别的数据,但是允许创建一个默认配置的服务。同时注册实例前不需要进行创建服务的操作,因为这种模式下,服务其实降级成一个简单的字符创标识,不在存储任何属性,会在注册实例的时候自动创建。

CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,因此网络分区下不能够注册实例,在网络正常情况下,可以编辑服务器别的配置。改模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

MIXED 模式可能是一种比较让人迷惑的模式,这种模式的设立主要是为了能够同时支持临时实例和持久化实例的注册。这种模式下,注册实例之前必须创建服务,在服务已经存在的前提下,临时实例可以在网络分区的情况下进行注册。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

是德DSOX3014T MSOX3014T数字逻辑示波器

概述: keysight是德DSOX3014T MSOX3014T数字逻辑示波器8.5 英寸电容触摸屏让操作和归档变得更加简单,可以加速您的测试,独有的区域触控触发技术支持您在几秒钟内轻松隔离信号,独有的区域触控触发技术支持您在几秒钟内轻松隔…

Java Swing界面 示例代码+效果

1.Swing 轻量级组件,由java编写 2.常用窗口 2.1 JFrame JFrame是一个容器,是一个顶层窗口 常用方法: setSize(int width, int height); setLocation(int x, int y);//窗口距离屏幕左上角位置,默认(0,0…

进行兼容性测试需要注意什么?

兼容性测试是一项非常重要的软件测试过程,它确保软件能够在各种不同的操作系统、浏览器和设备上正常运行,那进行兼容性测试需要注意什么? 1、确定测试范围 在进行兼容性测试之前,首先需要确定测试的范围。这包括要测试的操作系统、…

我收集的一些与学习相关的自用网站

目录 前言 一、学习教程网站 廖雪峰的官方网站 菜鸟教程网站 W3school网站 BEJSON校验网站 C语言中文网站 码农教程网站 JavaScript中文网站 CSS参考网站 Htmlcheatsheet 网站 练习CSS选择器网站 练习CSS Fiex网站 css自动生成流行布局和模式的集合的网站 交互式…

单例模式(三)

过气的,终究是过气了 上一章简单介绍了 UML 类图(二), 如果没有看过,请观看上一章 一. 单例模式 所谓的单例设计模式,就是采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实…

Jmeter之单接口的性能测试

目录 前言: 性能指标 测试工具选择 Jmeter 获取性能指标 编辑接口信息 设置监听器 开始监控 收集监控数据 数据指标分析 总结: 前言: 服务端的整体性能测试是一个非常复杂的概念,包含生成虚拟用户,模拟并发&a…

Centos7 离线安装gcc gcc-

方法一:centos7 挂载本地iso yum源 cd /etc/yum.repos.d/ vim ios.repo [ios] nameios baseurlfile:///mnt/cdrom enable1 gpgcheck0 #镜像挂载本地 mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom/ yum clean all yum makecache yum -y install gcc g…

助力工业智能生产质检,基于yolov5n/s/m不同精度系列模型开发构建热轧钢缺陷检测识别系统,对比分析性能差异

缺陷先关的智能检测应用和深度学习的结合是具有非常不错的应用前景的,比如:PCB缺陷检测、布匹瑕疵缺陷检测、瓷砖缺陷检测等等,在我之前的博文中对于缺陷领域相关的实践也有不少的项目开发实践,感性却的话可以自行移步阅读即可。 …

后端学vue2

工程创建 安装vue脚手架 安装好nodejs之后,安装vue脚手架 npm install -g vue/cli-g 参数表示全局安装,这样在任意目录都可以使用 vue 脚本创建项目安装时候使用vue ui 创建 安装 vue调试工具devtools devtools 插件网址:https://devtoo…

软件测试05:软件测试分类

软件测试05:软件测试分类 软件测试分类 按照开发阶段划分 单元测试 单元测试又称模型测试,是针对软件设计的最小单位——程序进行正确性检验的测试工作。其目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求…

华为参战!国产之光盘古大模型推:盘古Chat

盘古Chat是华为基于盘古大模型开发的一款多模态千亿级大模型产品,可以支持多种自然语言理解和生成的任务,如文本生成、问答、翻译、对话等。它是直接对标目前比较火爆的ChatGPT的产品,被认为是新一代的国产“AI”王炸。 盘古Chat预计将于今…

HTML5+CSS3+Vue小实例:仿制B站PC端首页的吃豆人轮播图

实例:仿制B站PC端首页的吃豆人轮播图 技术栈:HTML+CSS+Vue.js 字体图标库:font-awesome 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><…

功率放大器如何驱动水声声呐捕鱼?

第十五个“世界海洋日”&#xff0c;我们除了聚焦如何更好地保护海洋环境&#xff0c;对于海洋资源的可持续性利用&#xff0c;如何让“海洋宝藏”更好地造福人类&#xff0c;也是一个重要课题。想要发现更多的渔业资源&#xff0c;有项技术必不可少&#xff0c;那就是声呐技术…

Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

复现环境以及使用的工具 环境&#xff1a;使用Vulhub的漏洞环境 工具&#xff1a;bp和JNDIExploit-1-1.2&#xff0c;需要Java环境&#xff01;&#xff01; 攻击机和受害机配置 受害机&#xff1a;kali&#xff0c;ip地址为&#xff1a;192.168.150.135。使用vulhub漏洞环境…

无缝集合成功体验:打造高效的第三方API接口应用程序

欢迎来到我们的API接口 专业数据平台&#xff0c;今天我们将介绍如何使用库和框架API来简化开发流程&#xff0c;构建快速、可靠的应用程序。在本文档中&#xff0c;我们将重点介绍企业四要素API接口的作用&#xff0c;并提供一些示例代码可以帮助您更好地理解。 企业四要素是在…

统信下进行打deb安装包,ubuntu使用dpkg打deb包,tomcat的deb安装包制作

背景 由于安全需要&#xff0c;tomcat不能用解压缩版本&#xff0c;只能通过deb安装的方式使用。 制作tomcat的deb安装包 安装环境 使用 sudo apt-get install automake 将安装 autoconf{a} automake autotools-dev{a} 三个包。 使用 sudo apt-get install dh-make 将安装 …

docker离线安装mysql

docker离线安装mysql 第一步&#xff1a;找到一台联网的安装了docker的服务器&#xff0c;查看当前docker镜像&#xff1a;docker images &#xff0c;拉取mysql镜像包&#xff1a;docker save -o mysql.tar mysql:latest&#xff0c;其中latest为tag行内容 第二步&#xff1a…

号称 Java 面试八股文天花板(2023 最新版)首次开源

咱们先来说说&#xff1a; 最近感慨面试难的人越来越多了&#xff0c;一方面是市场环境&#xff0c;更重要的一方面是企业对 Java 的人才要求越来越高了。 基本上这样感慨的分为两类人&#xff0c;第一&#xff0c;虽然挂着 3、5 年经验&#xff0c;但肚子里货少&#xff0c;也…

Java中锁的分类,你了解几种?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 什么是锁隐式锁和显式锁隐式锁显式锁 悲观锁和乐观锁悲观锁乐观锁 公平锁和非公平锁公平锁非公平锁 可重入锁和非可重入锁可重入…

Java 基于 Apache ECharts 实现:柱状图、折线图、环形图等案例

Java 基于 Apache ECharts 实现&#xff1a;柱状图、折线图、环形图等案例 柱状图 效果图 源代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge" />&…