通过内核fanotify监听文件事件实现配置文件热更新

简介: 通过内核的方式实现一遍

前2两篇文章,通过定时器,信号,实现了配置文件热更新


  1. 通过定时器实现配置文件热更新
  2. 通过信号实现配置文件热更新


接下来介绍第三种方式,通过内核fanotify,监听事件变化,来重新加载配置文件


fanotify.go  代码如下

packagemainimport (
"encoding/json""fmt""io/ioutil""log""time""github.com/fsnotify/fsnotify")
//全局自定义拦截varintercept []Intercept//文件时间varftint64varfilenamestring="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)
    }
}
funclisten(w*fsnotify.Watcher) {
err :=w.Add(filename)
iferr!=nil {
log.Fatal(err)
    }
}
funcmain() {
//初始读取Read_resp()
watcher, err :=fsnotify.NewWatcher()
iferr!=nil {
log.Fatal(err)
    }
deferwatcher.Close()
listen(watcher)
gofunc() {
for {
select {
caseevent, ok :=<-watcher.Events:
if!ok {
return                }
log.Println("event:", event)
ifevent.Op&fsnotify.Write==fsnotify.Write {
log.Println("modified file:", event.Name)
Read_resp()
                }
ifevent.Op&fsnotify.Rename==fsnotify.Rename {
listen(watcher)
Read_resp()
                }
caseerr, ok :=<-watcher.Errors:
if!ok {
return                }
log.Println("error:", err)
            }
        }
    }()
//循环打印for {
time.Sleep(1*time.Second)
iflen(intercept) >0 {
fmt.Println(intercept[0].RespBody)
        }
    }
}


配置文件 intercept.json 

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


运行程序

./fsnotify

然后更改配置文件

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

程序输出

map[msg:ehh]
map[msg:ehh]
map[msg:ehh]
2021/11/13 09:45:22 event: "intercept.json": CHMOD
2021/11/13 09:45:22 event: "intercept.json": WRITE
2021/11/13 09:45:22 modified file: intercept.json
map[msg:ehhjjj]
map[msg:ehhjjj]
map[msg:ehhjjj]
map[msg:ehhjjj]
map[msg:ehhjjj]
map[msg:ehhjjj]
2021/11/13 09:45:29 event: "intercept.json": CHMOD
2021/11/13 09:45:29 event: "intercept.json": WRITE
2021/11/13 09:45:29 modified file: intercept.json
map[msg:ehhjjjjjj]
2021/11/13 09:45:30 event: "intercept.json": CHMOD
2021/11/13 09:45:30 event: "intercept.json": WRITE
2021/11/13 09:45:30 modified file: intercept.json
map[msg:ehhjjjjjjggg]
map[msg:ehhjjjjjjggg]
map[msg:ehhjjjjjjggg]
目录
相关文章
二维坐标系空间变换(详细解读,附MATLAB代码)
二维坐标系空间变换(详细解读,附MATLAB代码)
1883 0
二维坐标系空间变换(详细解读,附MATLAB代码)
|
监控 算法
独立成分分析(Independent Component Analysis,ICA)原理及代码实现
独立成分分析(Independent Component Analysis,ICA)原理及代码实现
独立成分分析(Independent Component Analysis,ICA)原理及代码实现
|
存储 Prometheus Cloud Native
Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo
Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo
|
10天前
|
人工智能 JavaScript IDE
零基础 AI 全能编程指南:OpenClaw 阿里云部署+Claude Code/OpenCode集成保姆级教程:
AI编程工具的核心痛点从来不是“功能不够强”,而是“上手门槛高”——复杂的安装命令、混乱的模型切换、不稳定的API渠道,让很多新手望而却步。2026年,这套痛点终于有了完美解决方案:以OpenRouter为稳定API中枢,搭配Claude Code(稳定版)与OpenCode(开源备用版)双引擎,再用CC-Switch统一管理模型与技能,全程支持支付宝支付,无需国外银行卡,甚至不用手动记忆复杂命令,借助AI辅助就能实现“小学二年级也能装”的零门槛体验。
1963 3
|
4月前
|
人工智能 定位技术 知识图谱
【两大核心+四轮驱动】Geo优化方案规划:避开17个AI时代获客陷阱的实战指南
于磊老师首创“两大核心+四轮驱动”Geo优化方法论,倡导人性化Geo与内容可信度,助力企业避开17大陷阱,在AI时代构建权威信源,实现获客提效与品牌升级。
345 12
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
455 2
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
数据采集 传感器 算法
数据采集与预处理
【6月更文挑战第21天】数据采集与预处理。
590 4
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
789 5
|
自然语言处理 搜索推荐 算法
gpt3模型训练数据量是多少?
【7月更文挑战第6天】gpt3模型训练数据量是多少?
3185 3
|
弹性计算 安全 数据可视化
转发路由器 Transit Router体验评测
从初识到动手实操,全方面了解转发路由器 Transit Router
61163 26
转发路由器 Transit Router体验评测

热门文章

最新文章