排查一次nacos动态配置不生效

news2024/11/27 21:02:21

一、问题描述

新需求需要使用到nacos动态配置,但是开发完成之后联调过程中发现动态配置没有生效。

二、问题排查

  1. 首先在本地测试,发现启动服务后修改nacos配置确实不生效,在查看启动日志时发现服务启动时打印了下面这样的日志。这里是在配置nacos的监听,在A服务的启动日志中只看到了对dubbo的监听配置,没有看到对配置文件的监听, 因此怀疑是对配置文件的监听没有注册成功。
  2. 因为B也有动态配置,为了验证判断,在本地启动了B服务然后查看日志,发现启动时打印了下面的日志

这段日志是注册对nacos配置文件的监听,因此可以确定是A服务启动时没有注册成功或没有注册对naocs配置文件的监听。

3. 通过查看nacos的代码,发现在NacosContextRefresher类中注册的监听,监听的dataId和group是从NacosPropertySourceRepository类中的NACOS_PROPERTY_SOURCE_REPOSITORY取的。此时怀疑可能是nacos配置错误导致监听注册失败。

4.开始第一次调试,发现NACOS_PROPERTY_SOURCE_REPOSITORY中包含了配置文件的dataId和group,不是之前怀疑的原因。此时怀疑是springboot的配置有问题或者代码的问题。

5.首先重新启动A服务,开始多次debug,发现在注册监听时会从AbstractApplicationEventMulticaster类中的成员变量defaultRetriever(ListenerRetriever类的对象)的applicationListeners属性中没有NacosContextRefresher,导致对nacos配置文件的监听没有注册成功。

6.此时对A重新debug,发现容器在注册监听之后才注册的NacosContextRefresher,此时判断对nacos配置文件的监听可能是在这之后。为了验证这种想法,debug了一次B的启动流程,发现spring确实是在服务启动之后注册的对nacos配置文件的监听,因此可以确定a在启动之后由于某些原因没有注册nacos配置文件的监听。

在下面一段代码的红框部分发布ApplicationReadyEvent事件,执行了这里,对nacos配置文件的监听才真正开启

7.重新debug A服务,发现springboot的run()中有一行callRunners(context, applicationArguments); 这个方法内部代码如下,这里使用主线程执行实现ApplicationRunner和CommandLineRunner的类中的代码,如果这些类中有阻塞,spring就不会执行listeners.running(context);。

8.经过上面的分析和debug,可以确定问题出现在A代码的SQSListener类中,这个类实现了ApplicationRunner,同时这里有while(true)的代码,从而导致主线程阻塞在这里,而且在这个时候A已经启动成功,所以A仍然可以提供服务。

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

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

相关文章

Blender3.2使用python脚本命令的三种方式, 以及源码示例

本文环境系统OS(Win10) 方式一,在Script(脚本)功能里面的Console(控制台输入python代码)。 如下图: 对应的三句代码是: print("Hi, blender.")import bpybpy.ops.mesh.primitive_cube_add(enter_editmodeFalse, alignWORLD, location(0,0, …

ModBus通信详解

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的…

python通过远程连接mysql数据库进行操作

文章目录 前言一、开启远程访问权限1、开启远程访问端口2、命令行登录mysql 二、Navicat 建库1、新建连接2、建库建表 三、python对数据库进行远程操作三、总结四、参考资料 前言 环境: 1、mysql 5.7 2、pycharm 22.3.1 Professional 3、navicat 一、开启远程访问权…

数字孪生与物流园区:优化布局规划的关键

随着全球贸易的增长和物流行业的发展,物流园区作为重要的物流枢纽和供应链管理中心,扮演着至关重要的角色。而数字孪生技术的出现为物流园区的运营和管理带来了革命性的变化。数字孪生技术是一种将实体物体与其数字化模型相结合的创新技术,通…

微信小程序| 基于ChatGPT+明基屏幕挂灯实现超智能家居物联网小程序

一、需求背景 在尝试了这么多次的ChatGPT在纯软方向的应用开发后,深感LLM(大语言模型)的能力之强大。俗话说得好:心有多大舞台就有多大!基于AI大模型,可以尝试的方面实在是数不胜数!轻轻松松就可以突破在移动互联网时…

1. Qt小游戏 --- 推箱子

1. 说明 这个小游戏主要使用Qt中的绘制事件函数**paintEvent()**在画布上面不停的绘制图形,并使用定时器做时间上的触发处理,这个小游戏只是做了简单的逻辑处理,具体复杂的功能读者可自行发挥,效果展示如下: Qt制作推箱子小游戏 2. 相关代码 《推箱子》小游戏项目文件中…

最新(photoshop AI)photoshop beta 安装成功过程

目录 安装过程说明如图 效果如图 第一步:手机浏览器 创建 微软邮箱 打开浏览器 注册时候,选择 MG,其他正常填写即可。 第二步:打开 官网,(创建账号)或者直接输入注册的账号直接登录 第三…

ArgoCD(四)--Application管理

1.3 Application管理 先导入一个测试的repo在本地gitlab(gitlab.icloud2native.com),方便测试。 1.3.1 创建application 通过argocd cli创建application 通过argocd 的命令行可以创建application argocd app create guestbook --repo http…

Spark大数据处理学习笔记1.2 Scala变量与数据类型

文章目录 一、变量声明(一)简单说明(二)利用val声明变量1、声明方式2、案例演示 (三)利用var声明变量1、声明方式2、案例演示 (四)同时声明多个变量 二、数据类型(一&…

企业课(理论)

数据链路层 IP地址:32bit 十进制、二进制表示 Mac地址:48bit 十六进制 (0-9,a-f) Mac地址: 单播Mac地址:一对一 48bit第八bit为0 组播Mac地址:一对多 48bit第八b…

iOS app上架截屏尺寸 5.5英寸:1242x2208 6.5英寸:1242x2688

5.5英寸和6.5英寸的iphone的截屏必须上传 5.5英寸:1242x2208 6.5英寸:1242x2688

张量分析入门笔记 (Tensor For Beginner)

前言 学习的时候感觉要学一下张量,在B站看了一个视频,记录一下,参考的是B站视频【机翻】张量分析入门 (Tensor For Beginner) 前言1. 张量的定义 Tenson Definition2. 张量的前向和后向的转换 Forward and Backward Transformation3. 向量 Ve…

Java网络开发(servlet思考)——什么时候用转发,什么时候用重定向 请求request,响应response

目录 引出转发和重定向1.请求转发---request2.响应重定向----response 转发?重定向?1.登陆后重定向2.登陆后转发3.总结 案例:图书信息管理系统1.用户相关操作---注册,登陆,修改密码 / 昵称,退出登陆2.图书相…

努力有没有用?

努力有没有用? 都说站在风口浪尖,猪都能飞起来。 但时代的红利也是给有准备的人才能抓住。凭什么人家努力了那么久,做了那么多准备,在无人问津的小黑屋熬那么久,终于出人头地后被说成是吃了时代的红利。 努力&#xf…

vue封装组件发布到npm,支持unplugin-vue-components按需引入

目的:vue封装组件发布到npm,支持unplugin-vue-components按需引入 vue组件 https://gitee.com/jiangzhuqingfeng/plugin-vue-componets.git工具类 https://gitee.com/jiangzhuqingfeng/plugin-validate.gittaro组件 https://gitee.com/jiangzhuqingfeng/plugin-tar…

4年测试经验面试要20K,简单问了一下,连基础都不会,我也是醉了····

现在招个合适的人可真难呀,不是这不会就是那不会,没有一个让我满意的 公司前段时间缺人,面试了不少的测试,结果居然没有一个符合要求的。一开始瞄准的就是中级测试工程师的水准,也没指望来技术大牛,提供的薪…

谷歌二次验证 Google Authenticator

后台登录要搞令牌,类似于steam令牌、企鹅令牌等等 开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。 实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责…

ChatGPT+Pandas 联手,打造智能数据分析助手PandasAI,数据分析师也要失业了?!

文章目录 前言一、ChatGPT的介绍二、Pandas的介绍三、使用Pandas处理文本数据四、使用ChatGPT生成文本总结 笔记、Python学习资料戳链接直达获取>> 前言 自然语言处理(NLP)是人工智能领域中的一个重要分支,它涉及到计算机对人类语言的…

Jedis使用教程详解

目录 一、前言二、基本使用三、Jedis连接池四、连接池参数五、哨兵模式六、集群模式七、Springboot当中使用Jedis八、Springboot源码分析 一、前言 Jedis是Redis的一款Java语言的开源客户端连接工具,什么是客户端?就是真正使用者,像我们安装…

【Web网站服务】Nginx优化

Nginx网页优化 一、配置Nginx网页缓存时间1.1设置方法 二、隐藏Nginx版本号2.1方法一:修改配置文件2.2方法二:修改源码文件,重新编译 三、修改用户与组四、日志切割五、连接超时六、更改进程数七、网页压缩八、配置防盗链九、Linux内核参数优…