Nacos心跳时间配置及服务快速上下线方式

 更新时间:2023年03月16日 09:41:55   作者:冰之杍  
这篇文章主要介绍了Nacos心跳时间配置及服务快速上下线方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Nacos心跳时间配置及服务快速上下线

Nacos默认心跳时间是30秒,不太满足正式环境需要,需要调整心跳时间更短,让线上服务上下线能快速感知。

1.修改微服务的nacos的心跳配置时间

preserved.heart.beat.interval: 1000 #该实例在客户端上报心跳的间隔时间。(单位:毫秒)
preserved.heart.beat.timeout: 3000 #该实例在不发送心跳后,从健康到不健康的时间。(单位:毫秒)
preserved.ip.delete.timeout: 3000 #该实例在不发送心跳后,被nacos下掉该实例的时间。(单位:毫秒)

如我的一个微服务tower-system的配置如下

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        metadata: 
          preserved.heart.beat.interval: 1000
          preserved.heart.beat.timeout: 3000
          preserved.ip.delete.timeout: 3000

2.修改spring cloud的gateway的ribbion配置

修改了步骤1中的配置后,nacos的控制台,能保证微服务3秒内能快速响应上下线,但我们的访问是通过gateway统一访问的,gateway集成了ribbion的负载均衡功能,其默认是定时一定的时间间隔去nacos拉取最新的服务实例数据到本地缓存,因此,仅仅修改nacos的配置,还是不能保证能及时的进行服务上下线,需要设置ribbon.ServerListRefreshInterval,增加拉取nacos中最新服务实例的频率,如下`

#ribbon config,Interval to refresh the server list from the source 
ribbon: 
  ServerListRefreshInterval: 3000

步骤1可能需要花3秒中更新实例,步骤2定时拉取nacos最新实例需要最快3秒,因此加起来,可能需要花费最多6秒,能使最新的服务生效

Nacos心跳机制

Nacos内部注册的服务分为两大类:

  • 临时实例(默认)
  • 持久化实例

可以通过.yml中设置ephemeral属性来确定服务为临时或永久。

例如:

spring:
  cloud:
    nacos:
      discovery:
        # 定义nacos运行的路径
        server-addr: localhost:8848
        # ephemeral 设置当前项目启动时注册到nacos的类型true(默认):临时实例false:永久化实例
        ephemeral: true

临时实例和永久实力的区别:

临时实例

默认情况下,启动服务后,每隔5秒会向nacos发送一个"心跳包",这个心跳包中包含了当前服务的基本信息

Nacos收到这个"心跳包"如果发现这个服务的信息不在注册列表中,就进行注册,如果这个服务的信息在注册列表中就表明这个服务还是健康的

如果Nacos15秒内没接收到某个服务的心跳包,Nacos会将这个服务标记为不健康的状态

如果30秒内没有接收到这个服务的心跳包,Nacos会将这个服务从注册列表中剔除

这些时间都是可以通过配置修改的

持久化实例(永久实例)

持久化实例启动时向nacos注册,nacos会对这个实例进行持久化处理

心跳包的规则和临时实例一致,只是不会将该服务从列表中剔除

各类型使用时机

一般情况下,我们创建的服务都是临时实例。

只有项目的主干业务才会设置为永久实例。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java使用文件流实现查看下载次数

    java使用文件流实现查看下载次数

    这篇文章主要为大家详细介绍了java使用文件流实现查看下载次数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Java并发之ReentrantLock类源码解析

    Java并发之ReentrantLock类源码解析

    这篇文章主要为大家详细介绍了Java并发系列之ReentrantLock源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • SpringCloud Netflix Ribbon超详细讲解

    SpringCloud Netflix Ribbon超详细讲解

    这篇文章主要介绍了SpringCloud笔记HoxtonNetflix之Ribbon负载均衡,Ribbon是管理HTTP和TCP服务客户端的负载均衡器,Ribbon具有一系列带有名称的客户端(Named Client),对SpringCloud Ribbon负载均衡相关知识感兴趣的朋友一起看看吧
    2022-10-10
  • mybatis自动填充时间字段示例代码

    mybatis自动填充时间字段示例代码

    这篇文章主要给大家介绍了关于mybatis自动填充时间字段的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • hibernate中的对象关系映射

    hibernate中的对象关系映射

    hibernate中的ORM映射文件通常以.hbm.xml作为后缀。使用这个映射文件不仅易读,而且可以手工修改,也可以通过一些工具来生成映射文档,下文给大家详细的介绍hibernate中的对象关系映射,需要的朋友参考下吧
    2017-09-09
  • MyBatis 超详细讲解动态SQL的实现

    MyBatis 超详细讲解动态SQL的实现

    动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦
    2022-03-03
  • JDK 14的新特性:文本块Text Blocks的使用

    JDK 14的新特性:文本块Text Blocks的使用

    这篇文章主要介绍了JDK 14的新特性:文本块Text Blocks的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • SpringBoot如何优雅的整合Swagger Api自动生成文档

    SpringBoot如何优雅的整合Swagger Api自动生成文档

    在多人协作的开发过程中,API文档不仅可以减少等待,也能保证开发的持续进行,这篇文章主要给大家介绍了关于SpringBoot如何优雅的整合Swagger Api自动生成文档的相关资料,需要的朋友可以参考下
    2021-07-07
  • Java使用CompletableFuture实现异步编程

    Java使用CompletableFuture实现异步编程

    在现代 Java 开发中,异步编程是一项重要技能,而 CompletableFuture 是从 Java 8 开始提供的一个功能强大的工具,用于简化异步任务的编写和组合,本文将详细介绍 CompletableFuture 的基本使用和一些常见的应用场景,需要的朋友可以参考下
    2025-01-01
  • SpringBoot连接MYSQL数据库并使用JPA进行操作

    SpringBoot连接MYSQL数据库并使用JPA进行操作

    今天给大家介绍一下如何SpringBoot中连接Mysql数据库,并使用JPA进行数据库的相关操作。
    2017-04-04

最新评论