实时监听nacos中的服务上下线

2023-10-29

1.背景

在使用spring cloud gateway时,服务的上下线可能会没那么及时,这样就会导致在进行业务服重启时会出现部分用户请求接口出现503,服务不可用的情况。

nacos-client版本:

1.4.1

spring-cloud-starter-alibaba-nacos-discovery版本:

2.2.5

2.实现

在spring-cloud-starter-alibaba-nacos-discovery中并未找到获取服务注册时进行会发布的事件,所以去nacos-client中找到了InstancesChangeEvent 事件,并且发现了事件的发布订阅关系

在 com.alibaba.nacos.client.naming.core.HostReactor 类中

				this.notifier = new InstancesChangeNotifier();
        
        NotifyCenter.registerToPublisher(InstancesChangeEvent.class, 16384);
        NotifyCenter.registerSubscriber(notifier);

至此,我们找到了实现方案:

模仿InstancesChangeNotifier进行自己服务实例变化处理

@Component
@Slf4j
public class NacosServiceInstanceChangeNotifier extends Subscriber<InstancesChangeEvent>{

    @PostConstruct
    public void registerToNotifyCenter(){
        NotifyCenter.registerSubscriber(this);
    }
    @Override
    public void onEvent(InstancesChangeEvent instancesChangeEvent) {
        log.info("监听nacos的服务实例变化情况:{}", JSON.toJSONString(instancesChangeEvent));
    }

    @Override
    public Class<? extends Event> subscribeType() {
        return InstancesChangeEvent.class;
    }
}

当服务上下线时:

服务上线:
监听nacos的服务实例变化情况:{"clusters":"","groupName":"DEFAULT_GROUP","hosts":[{"clusterName":"DEFAULT","enabled":true,"ephemeral":true,"healthy":true,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"instanceId":"192.168.0.188#15061#DEFAULT#DEFAULT_GROUP@@client-api-service","ip":"192.168.0.188","ipDeleteTimeout":30000,"metadata":{"preserved.register.source":"SPRING_CLOUD","server.startup-time":"1680507089247"},"port":15061,"serviceName":"DEFAULT_GROUP@@client-api-service","weight":1.0}],"serviceName":"DEFAULT_GROUP@@client-api-service"}

服务下线:
监听nacos的服务实例变化情况:{"clusters":"","groupName":"DEFAULT_GROUP","hosts":[],"serviceName":"DEFAULT_GROUP@@client-api-service"}

3. 未完待续

  1. 如何刷新负载均衡器的缓存
  2. 动态路由如何刷新
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实时监听nacos中的服务上下线 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • C语言进阶(九)—— 函数指针和回调函数、预处理、动态库和静态库的使用、递归函数

    1 函数指针 1 1 函数类型 通过什么来区分两个不同的函数 一个函数在编译时被分配一个入口地址 这个地址就称为函数的指针 函数名代表函数的入口地址 函数三要素 名称 参数 返回值 C语言中的函数有自己特定的类型 c语言中通过typedef
  • 学习笔记-选择排序

    选择排序 将一个一维数组从小到大排序 思路 选择排序的思路是 首先认为数组的第一个数是最小的 保留它然后遍历它后面的数 跟它作比较 选择出最小的数和位置 遍历结束后 让这个最小的数和数组的第一位数交换 这样确定了第一个最小的数 之后重复这个
  • Unity AR阴影投射透明地面 仅渲染模型实时阴影 Shader实现

    亲测可用 上面就是实现的效果 仅仅渲染阴影 地面透明 也可以换成AR中的虚拟物体 AR中为的虚拟物体添加阴影 只用unity的光照投影是没办法实现的 或者需求是 角色需要投射阴影在墙上 但是墙不能显示 只渲染出阴影 相当于接受阴影的地面墙体
  • 吊打 CLIP 平均10个点,Meta 多模态通用模型 FLAVA真香啊

    厉害了 作者将单一模型运用于三个不同领域的不同任务 结构简单且训练直观 还能有着出色的表现 自Transformer横空出世 从NLP到CV 再到今天的多模态 无数基于Transformer的模型被应用于各类任务 似乎真的印证了当年文章的标
  • ldd not a dynamic executable

    在开发环境编译运行很ok的程序 到了客户的生产环境一直有问题 编译找不到库 类似这个样子 usr bin ld skipping incompatible lib libasound so when searching for lasoun
  • EXCEL-VBA:Workbooks.Open 参数 (打开文件)

    打开一个工作簿 语法 表达式 Open FileName UpdateLinks ReadOnly Format Password WriteResPassword IgnoreReadOnlyRecommended Origin Deli
  • UE5导入倾斜摄影

    前言 虚幻引擎是全球最先进的实时3D创作工具 可制作照片级逼真的视觉效果和沉浸式体验 2022年4月5号虚幻引擎发布了颠覆性的UE5 倾斜摄影是城市实景的基础 通过无人机采集实际照片再进行三维重建 常见的数据格式为osgb 本文主要介绍UE
  • JSP自定义标签的(生命周期与开发if,foreach,out)

    自定义标签定义 是用户定义的JSP语言元素 扩展名为tld的文件 tag标签的配置文件 通常放在WEB INF下面 自定义标签的开发及使用步骤 思路 1 1 创建一个标签助手类 继承BodyTagSupport 标签属性必须助手类的属性对应
  • 测试自动化平台

    https mp weixin qq com s WU5h8FW6BT5YZtlsSuCIcw 摘要 随着近几年国内IT行业高速发展 对测试工程师的要求也越来越高 其作用也越来越重要 但很多测试工程师也迎来了个人发展的瓶颈 下一步该向哪个方
  • clock的accuracy(tolerance)和jitter

    对于clock来说 有两个参数来衡量质量 分别是jitter和accuracy tolerance Jitter的单位是ps Tolerance的单位是ppm 百万分之 在晶振 RTC和Oscillator中也会找到类似参数 SOC和MCU
  • Hexo标签插件的使用

    tag 插件 Tag Plugin 是 Hexo 提供的一种快速生成特定内容的方式 例如 在标准 Markdown 语法中 我们无法指定图片的大小 这种情景 我们即可使用标签来解决 Hexo 内置来许多标签来帮助写作者可以更快的书写 完整的
  • docker运行nginx为什么要使用 nginx -g 'daemon off;'

    1 docker容器跑着为啥会挂掉 docker 容器默认会把容器内部第一个进程 也就是pid 1的程序作为docker容器是否正在运行的依据 如果docker 容器pid挂了 那么docker容器便会直接退出 2 docker run的时
  • 用Pandas做数据清洗的常用操作!

    大家好 我是小z 今天给大家分享一篇pandas数据清洗的干货 作为一名数据分析师 每天都在完成各种数据分析需求 其中数据清洗是必不可少的一个步骤 一般而言 当提及数据清洗时 其实是主要包括了缺失值处理 重复值处理和异常值处理三类操作 本文
  • DML语法整理笔记

    目录 1 什么是DML 2 两种INSERT方式 2 1 方式一 2 2 方式二 2 3 INSERT特点 2 4 两种方式对比 3 UPDATE 3 1 修改单标记录 3 2 修改多表记录 4 DELETE 4 1 方式一 可以删全表也可
  • 线性回归实战---Abalone鲍鱼年龄预测

    线性回归实现Abalone鲍鱼年龄预测 文章目录 线性回归实现Abalone鲍鱼年龄预测 一 环境准备 数据集简介 二 线性回归基础知识 什么是线性回归 最小二乘法 求解线性回归问题 三 Python代码 四 结果分析 前面我们使用手动编写
  • 2023年江苏省中职网络安全Web渗透测试解析(超详细)

    一 竞赛时间 180分钟 共计3小时 二 竞赛阶段 1 访问地址http 靶机IP web1 分析页面内容 获取flag值 Flag格式为flag xxx 2 访问地址http 靶机IP web2 分析页面内容 获取flag值 Flag格式
  • 什么是DNS欺骗和ARP欺骗?有何区别?

    欺骗攻击是黑客比较常用的一种攻击方式 也是一种隐蔽性较高的网络攻击方式 目前欺骗攻击的主要方式有 IP欺骗 ARP欺骗 DNS欺骗 Web欺骗 电子邮件欺骗等 那么DNS欺骗和ARP欺骗的区别是什么 具体请看下文 DNS欺骗 DNS欺骗是一
  • DIY党的福利!鹅厂程序员教你200元以内制作专属分体键盘

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由VellHe发表于云 社区专栏 前言 作为一名程序员 键盘在手 天下我有啊 不整把高大上的键盘怎么提升B格 之前一直想买个机械键盘 听说机械键盘敲代码和玩游戏都特别爽 也是装B
  • 一款linux系统下的串口调试工具 - COMTransmit

    最近在调试linux下的串口的时候找到了一款好用且功能齐全的串口调试工具 跟大家分享一下 COMTransmit的安装 安装包下载地址 64位 链接 https pan baidu com s 1rxGhMtXYNApjhXquPtiW0w
  • 实时监听nacos中的服务上下线

    1 背景 在使用spring cloud gateway时 服务的上下线可能会没那么及时 这样就会导致在进行业务服重启时会出现部分用户请求接口出现503 服务不可用的情况 nacos client版本 1 4 1 spring cloud