Nacos client SDK 订阅式请求坑

一、场景复现

(1)业务需求

在不同的nacos注册集群,不同的namespace,由页面发起查询nacos集群上注册的服务实例ip。

(2)故障现象

nacos集群配置推送push超时,查看nacos日志请求一直在20~30qps不间断。把源站点的请求日志打印出来,发现除了端口不一样几乎都是参数相同的请求。

2021-01-11 12:43:20,133 INFO /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=MusicService&udpPort=59393&encoding=UTF-8,172.16.2.21
2021-01-11 12:43:20,256 INFO /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=PhotoService&udpPort=52456&encoding=UTF-8,172.16.2.21
2021-01-11 12:43:20,155 INFO /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=FruitService&udpPort=30299&encoding=UTF-8,172.16.2.21
2021-01-11 12:43:20,236 INFO /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=pro&clientIP=172.16.2.21&serviceName=CityService&udpPort=48202&encoding=UTF-8,172.16.2.21
2021-01-11 12:43:20,742 INFO /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=dev&clientIP=172.16.2.21&serviceName=CountryService&udpPort=12920&encoding=UTF-8,172.16.2.21

源站点的代码

maven设置

        <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.3.3</version></dependency>

代码 

private List<Instance> queryInstances(String serviceName, String ip, int port, String namespace) {try {Properties properties = new Properties();properties.setProperty("namespace", namespace);properties.setProperty("serverAddr", ip + ":" + port);NamingService naming = NamingFactory.createNamingService(properties);List<Instance> instances = naming.selectInstances(serviceName, true);log.info("nacos查询结果, ip:{}, size:{}", ip, instances.szie());return instances;}catch (Exception e){log.warn("nacos查询异常", e);}return Collections.emptyList();
}

通过关键字查询源站点的日志,统计得到请求次数才是十几次,跟nacos上的请求数几十万相差很远,百思不得其解。停掉源站点的进程,请求就消失没有了。

过了两天后,有需要使用到查询服务ip的功能,又把源站点的进程启动起来,不久又出现nacos请求的20-30qps。

 

(3)分析问题

上源站点的机器把tcp dump快照打印:发现请求一次页面接口,发送了tcp nacos查询uri连接20~30次,有些请求是没有响应体的。

No.  Time      Source       Destination  Protocol Length Info
5    0.291331  172.16.2.21   172.16.2.22   HTTP     372    GET /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=MusicService&udpPort=43212&encoding=UTF-8
8    0.223167  172.16.2.21   172.16.2.22   HTTP     372    GET /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=MusicService&udpPort=21345&encoding=UTF-8
10   0.182930  172.16.2.21   172.16.2.22   HTTP     372    GET /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=MusicService&udpPort=21245&encoding=UTF-8
11   0.308301  172.16.2.21   172.16.2.22   HTTP     371    GET /nacos/v1/ns/instance/list,app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=CityService&udpPort=23145&encoding=UTF-8
GET /nacos/v1/ns/instance/list?
app=unknown&healthyOnly=false&namespaceId=test&clientIP=172.16.2.21&serviceName=CityService&udpPort=23145&encoding=UTF-8 HTTP/1.1
Client-Version: Nacos-Java-client:v1.3.3
User-Agent: Nacos-Java-Client:v1.3.3
Accept-Encoding: gzip,deflate,sdch
RequestId: ba341cd2-a5cd-d132-67cb-e1f34135a12c
Request-Module: Naming
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Accept-Charset: UTF-8
Host: 172.16.2.22:10812
Accept: text/html,image/gif,image/jpeg,*; q=.2,*/*;q=.2
Connection: keep-alive

从这里可以推断出,应该是nacos 订阅机制,很多不断请求。

翻看naocs client的源码,发现很多reator后缀的属性和类对象的初始化,进一部验证了订阅机制猜测。

 

二、解决方案

       基本的解决方法:NamingService.selectInstances(serviceName, health)方法默认是订阅的,不使用该方法,改成NamingService.selectInstances(serviceName, health, subscribe)方法,使用后及时调用NamingService.shutdown()方法,避免sdk里面继续订阅请求。

      SDK本身就是订阅响应式的,不适合查询一次的实例ip的场景,使用restful api查询最合适,避免多了订阅同步请求。

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

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

相关文章

AWS Lambda现已支持.NET Core 2.0

Amazon宣称.NET Core 2.0现在已经支持AWS Lambda以及无服务器应用程序了。开发者们现在可以使用C#和.NET Core 2.0来为AWS Lambda编写代码和编写运行于AWS的无服务器应用程序了。自2017年2月Amazon开始了对C#编程语言的支持&#xff0c;这使得.NET开发者能够使用.NET Core 1.0运…

jzoj3236-矮人排队【权值线段树】

正题 题目链接:https://jzoj.net/senior/#main/show/3236 题目大意 一个序列两个操作 1XY:1\ X\ Y:1 X Y:交换XXX和YYY两个数2AB:2\ A\ B:2 A B:询问A∼BA\sim BA∼B这些数再序列中是否是连续的一段区间(不一定按顺序) 解题思路 先不考虑交换&#xff0c;对于询问我们发现它…

Nacos(一)之简介

转载自 什么是 Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现…

开源纯C#工控网关+组态软件(八)表达式编译器

一、 引子监控画面的主要功能之一就是跟踪下位机变量变化&#xff0c;并将这些变化展现为动画。大部分时候&#xff0c;界面上一个图元组件的某个状态&#xff0c;与单一变量Tag绑定&#xff0c;比如电机的运行态&#xff0c;绑定一个MotorRunning信号&#xff1b;但有些时候…

jzoj3237-间谍派遣【最小生成树,并查集】

正题 题目大意 一张图&#xff0c;第iii个点参加任务需要mkimk_imki​元&#xff0c;连接一条边需要一定费用&#xff0c;要求每个联通图都有参加任务的点&#xff0c;求最小费用。 解题思路 其实就是求若干个最小生成树然后这个最小生成树的权值就是这个棵树的所有边权加上最…

g4e基础篇#6 了解Git历史记录

Git的版本历史记录采用了与传统集中式版本管理系统完全不同的方式进行组织&#xff0c;在刚开始使用Git的时候我们往往会不知所措&#xff0c;比如看到这样的历史记录。看到这个七拐八拐的图形&#xff0c;你可能完全不知道它代表了什么。其实这正是Git的特别之处&#xff0c;G…

Nacos(二)之概念

转载自 Nacos 概念 NOTE: Nacos 引入了一些基本的概念&#xff0c;系统性的了解一下这些概念可以帮助您更好的理解和正确的使用 Nacos 产品。 地域 物理的数据中心&#xff0c;资源创建成功后不能更换。 可用区 同一地域内&#xff0c;电力和网络互相独立的物理区域。同一可…

bzoj3482,jzoj3238-超时空旅行hiperprostor【最短路,凸包,斜率优化】

正题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id3482 题目大意 一张有向图有正整数边权也有xxx边权。其中xxx可以取任何值(但是要注意所有的xxx边必须长度相等)&#xff0c;每次询问求SSS到TTT的可能最短路长度个数和它们的和。 解题思路 分层图&#xff…

Ray框架QA

Orleans与Akka对比&#xff0c;为什么选用Orleans&#xff1f;答: Akka对参与开发的人员要求更高一些&#xff0c;普遍是专家级别&#xff0c;Orleans框架进一步抽象了一层&#xff0c;结合C#语言特性&#xff0c;能普遍降低开发难度。下面是知乎网友的答案&#xff0c;可以参考…

Nacos(三)之架构

转载自 Nacos 架构 基本架构及概念 服务 (Service) 服务是指一个或一组软件功能&#xff08;例如特定信息的检索或一组操作的执行&#xff09;&#xff0c;其目的是不同的客户端可以为不同的目的重用&#xff08;例如通过跨进程的网络调用&#xff09;。Nacos 支持主流的服务…

欢乐纪中某A组赛【2019.7.11】

前言 话说今天好像放做题导致BBB组贼难AAA组还好。 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC101010(J−2)WYC(J-2)WYC(J−2)WYC250250250100100100100100100505050282828(J−2)ZYC(J-2)ZYC(J−2)ZYC…

ASP.NET Core Razor页面禁用防伪令牌验证

这篇短文中&#xff0c;我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证。Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架&#xff0c;用于构建动态的、数据驱动的网站&#xff1b;支持跨平台开发&#xff0c;可以部署到Windows&#xff0c;Unix和Mac操作系…

Nacos(四)之安装

转载自 Nacos 快速开始 这个快速开始手册是帮忙您快速在您的电脑上&#xff0c;下载、安装并使用 Nacos。 0.版本选择 您可以在Nacos的release notes及博客中找到每个版本支持的功能的介绍&#xff0c;当前推荐的稳定版本为1.4.1。 1.预备环境准备 Nacos 依赖 Java 环境来…

jzoj1166-树中点对距离【点分治】

正题 题目大意 求一棵树上有多少条路径长度≤len\leq len≤len 解题思路 首先普通点分治。扫描的时候将每个点保存为一个二元组(dis,gra)(dis,gra)(dis,gra)分别表示离(分治到的)根的距离&#xff0c;属于根的那颗子树。 然后按照disdisdis排序&#xff0c;两个指针L,RL,RL,…

ASP.NETCore的Kestrel服务器

什么是Kestrel服务器Kestrel是开源的&#xff08;GitHub提供的源代码&#xff09;&#xff0c;事件驱动的异步I / O服务器&#xff0c;用于在任何平台上托管ASP.NET应用程序。这是一个监听服务器和一个命令行界面。您将侦听服务器安装在Windows或Linux服务器上&#xff0c;并在…

Nacos(五)之Spring集成

转载自 Nacos Spring 快速开始 本文主要面向 Spring 的使用者&#xff0c;通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务发现。 关于 Nacos Spring 的详细文档请参看&#xff1a;nacos-spring-project。 通过 Nacos server 和 Nacos Spring 配置管…

jzoj3360-[NOI2013模拟]苹果树【树上莫队,LCA】

正题 题目大意 一棵树上每个节点有不同的颜色&#xff0c;然后每次询问(x,y,a,b)(x,y,a,b)(x,y,a,b)表示将颜色aaa看为颜色bbb的情况下询问xxx到yyy有多少不种的颜色。 解题思路 数颜色&#xff0c;显然树上莫队。我们维护一个欧拉序dfndfndfn(进去时记录一次出来时记录一次)…

Polly组件对微服务场景的价值

Polly是一个开源框架,在github上可以找到,被善友大哥收录,也是.App vNext的一员!App vNext:https://github.com/App-vNextGitHub:https://github.com/App-vNext/PollyNanoFabric是一个开源的微服务架构,也是善友大哥推荐的:https://github.com/geffzhang/NanoFabric对于NanoFab…

Nacos(六)之Spring Boot集成

转载自 Nacos Spring Boot 快速开始 本文主要面向 Spring Boot 的使用者&#xff0c;通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务发现。 关于 Nacos Spring Boot 的详细文档请参看&#xff1a;nacos-spring-boot-project。 通过 Nacos Server 和…

P4556,jzoj3397-[GDOI2014模拟]雨天的尾巴【树链剖分,线段树】

正题 题目链接:https://www.luogu.org/problemnew/show/P4556 题目大意 nnn个点的一棵树&#xff0c;给出mmm个操作(x,y,z)(x,y,z)(x,y,z)表示将xxx到yyy的路径上的所有点给与一个zzz类型的食量。 最后对于每个点输出最多的粮食类型。 解题思路 先对这棵树进行树剖&#xff…