通过信号实现配置文件热更新

简介: 通过信号来实现一遍配置文件热更新

配置文件修改后,要达到及时生效,热加载的目的,那么可以通过2种方式实现

  1. 定时器循环,查看文件更新时间,如果发现有修改,那么重新加载
  2. 监听信号,文件更改后,发送信号,通过捕获信号,再重新加载


例如,线上的应用日志级别为 info ,出现故障后,你需要开启 debug 来排查日志,但是把日志级别改成 debug ,那么你不得不重启应用,可能故障现象就不存在或不好重现了,而且重启服务可能会影响用户体验。


上一篇已经介绍了通过定时器实现配置文件热更新,以下我就介绍另一种信号的方式来实现吧。

signal.go 

packagemainimport (
"encoding/json""fmt""io/ioutil""log""os""os/signal""syscall""time")
//全局自定义拦截varintercept []Interceptvarfilenamestring="intercept.json"typeInterceptstruct {
Urlstring`json:"url"`Methodstring`json:"method"`RespHeadermap[string]string`json:"resp_header"`RespBodyinterface{}       `json:"resp_body"`RespCodeint`json:"resp_code"`}
//读取自定义响应文件funcRead_resp() {
intercept_data, err :=ioutil.ReadFile(filename)
iferr!=nil {
log.Fatalln(err)
    }
err=json.Unmarshal(intercept_data, &intercept)
iferr!=nil {
log.Fatalln(err)
    }
}
funcmain() {
//初始读取Read_resp()
//监听信号sig :=make(chanos.Signal, 1)
signal.Notify(sig, syscall.SIGUSR1)
gofunc() {
for {
select {
//获取到信号,再次执行case<-sig:
Read_resp()
            }
        }
    }()
//循环打印for {
time.Sleep(1*time.Second)
iflen(intercept) >0 {
fmt.Println(intercept[0].RespBody)
        }
    }
}

配置文件

intercept.json 

[{
"url": "http://test.cloudcare.cn/api/v1/workspace/member/list",
"method": "get",
"resp_body": {"msg": "d"},
"resp_header": {"Content-Type": "application/json"},
"resp_code": 200}]


运行程序后,我编辑配置文件内容 resp_body  ,然后手动给进程发送信号

先查找出运行进程的pid

[root@izbp152ke14timzud0du15z signal]# ps -ef|grep signalroot     278002688015:58 pts/1    00:00:00 ./signal
root     2787617301015:58 pts/2    00:00:00 grep--color=auto signal


通过kill给进程发送信号

[root@izbp152ke14timzud0du15z signal]# kill -USR1 27800


程序捕获到信号后,会重新读取配置文件

map[msg:d]
map[msg:d]
map[msg:d]
map[msg:d]
map[msg:ff]
map[msg:ff]
map[msg:ff]
map[msg:ff]
map[msg:ff]
map[msg:ff]
map[msg:dde]
map[msg:dde]
目录
相关文章
|
人工智能 API 语音技术
[译][AI OpenAI-doc] 文字转语音
学习如何将文字转换为栩栩如生的口头语音。音频 API 提供基于我们的 TTS(文本到语音)模型的语音端点,支持实时音频流传输。
|
IDE JavaScript Ubuntu
推荐两款在用免费云端 IDE
优点: 无需手动安装;预设常见Java , Python, JS 等环境, 支持创建网页预览,在线开发调试。
1290 0
推荐两款在用免费云端 IDE
|
8月前
|
人工智能 自然语言处理 供应链
AI时代企业难以明确大模型价值,AI产品经理如何绘制一张‘看得懂、讲得通、落得下’的AI产品架构图解决这一问题?
本文产品专家系统阐述了AI产品经理如何绘制高效实用的AI产品架构图。从明确企业六大职能切入,通过三层架构设计实现技术到业务的精准转译。重点解析了各职能模块的AI应用场景、通用场景及核心底层能力,并强调建立"需求-反馈"闭环机制。AI产品专家三桥君为AI产品经理提供了将大模型能力转化为商业价值的系统方法论,助力企业实现AI技术的业务落地与价值最大化。
427 0
|
数据采集 监控 安全
数字孪生与金融:风险管理的新工具
数字孪生技术通过构建物理实体或系统的虚拟模型,实现对金融市场的实时监控、客户行为分析、市场风险预测及业务流程优化,为金融机构提供了全新的风险管理工具,提升了风险管理的精准度和效率。
|
前端开发 JavaScript 数据挖掘
|
机器学习/深度学习 人工智能 自然语言处理
《鸿蒙Next:让人工智能语音交互听懂每一种方言和口音》
鸿蒙Next系统通过丰富方言语音数据、优化语音识别模型、引入语音合成技术及用户反馈机制,大幅提升对不同方言和口音的识别能力。具体措施包括多渠道收集方言数据、建立动态数据库、采用深度学习算法、实现多任务学习与对抗训练、生成标准方言样本,并结合硬件如麦克风阵列技术优化语音输入质量。这些综合手段确保了语音交互的准确性和实时性,为用户提供更智能、便捷的服务。
884 16
|
存储 自然语言处理 Python
汉字转Unicode
汉字转Unicode
|
Linux 测试技术 计算机视觉
AlphaPose复现配置教程
本文是AlphaPose姿态估计系统的复现配置教程,包括在Ubuntu22.04系统下的环境配置、依赖安装、AlphaPose代码获取与安装、权重文件替换、预训练模型下载以及测试运行的详细步骤。
1108 1
AlphaPose复现配置教程
|
人工智能 自然语言处理 小程序
基于通义千问32B及RAG技术的CACA指南诊疗规范平台落地实践
本方案整合CACA智能导航系统与基于RAG的大模型医疗问答系统,旨在提供高效、精准的肿瘤诊治支持。通过指南AI导航、知识图谱查询等功能,优化医生诊疗流程,提升患者服务质量,实现医疗资源的有效利用。
864 6

热门文章

最新文章