go开源项目influxdb-relay源码分析
时间:2018-09-20
本文章向大家介绍go开源项目influxdb-relay源码分析,需要的朋友可以参考一下
influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果。
不多说,开搞~
1、main.go
1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "os" 8 "os/signal" 9 10 "github.com/influxdata/influxdb-relay/relay" 11 ) 12 13 var ( 14 //influxdb-realy启动时接收的配置文件参数,因为是falg.String所以接收的是一个字符串类型的参数 15 //flag.String 函数第一个参数代表启动时参数的名称,第二个参数代表默认值,第三个参数代表用途描述,此方法返回一个指针 16 //那么启动realy时应该是这个样子的: ./influxdb-relay -config relay.toml ———— "-config" 就是匹配上面flag.String函数第一个参数, "relay.toml" 是-config的值,这里代表配置文件的路径 17 configFile = flag.String("config", "", "Configuration file to use") 18 ) 19 20 func main() { 21 //flag.Parse是用来解析启动时传入的参数,必须调用 22 flag.Parse() 23 24 //如果启动参数,配置文件路径为空 25 if *configFile == "" { 26 //记录日志 27 fmt.Fprintln(os.Stderr, "Missing configuration file") 28 //打印需要的参数提示,也就是会输出上面flag.String函数第三个参数 29 flag.PrintDefaults() 30 //退出 31 os.Exit(1) 32 } 33 //加载配置文件 34 cfg, err := relay.LoadConfigFile(*configFile) 35 //LoadConfigFile方法如下: 主要做的事情是把配置文件反序列化成一个Config对象然后return,也就是cfg 36 // func LoadConfigFile(filename string) (cfg Config, err error) { 37 // f, err := os.Open(filename) 38 // if err != nil { 39 // return cfg, err 40 // } 41 // defer f.Close() 42 // return cfg, toml.NewDecoder(f).Decode(&cfg) 43 // } 44 if err != nil { 45 fmt.Fprintln(os.Stderr, "Problem loading config file:", err) 46 } 47 //根据Config对象 创建relay组件 48 r, err := relay.New(cfg) 49 if err != nil { 50 log.Fatal(err) 51 } 52 //定义接收操作系统信号的channel 53 sigChan := make(chan os.Signal, 1) 54 //notify用于监听信号,如果操作系统向当前进程发送中断信号(os.Interrupt 表示中断信号) 55 signal.Notify(sigChan, os.Interrupt) 56 //如果接收到中断信号,开一个协程调用relay的Stop方法 停止http监听 57 go func() { 58 <-sigChan 59 r.Stop() 60 }() 61 62 log.Println("starting relays...") 63 //relay 运行 64 r.Run() 65 }
2、配置文件 relay.toml
1 [[http]] 2 name = "example-http" 3 bind-addr = "127.0.0.1:9096" 4 output = [ 5 { name="influxdb-1", location = "http://127.0.0.1:8086/write" }, 6 { name="influxdb-2", location = "http://127.0.0.1:7086/write" }, 7 ] 8 9 [[udp]] 10 name = "example-udp" 11 bind-addr = "127.0.0.1:19096" 12 read-buffer = 0 # default 13 output = [ 14 { name="influxdb-1", location="127.0.0.1:8089", mtu=512 }, 15 { name="influxdb-2", location="127.0.0.1:7089", mtu=1024 }, 16 ]
总结:
1、加载配置文件 relay.toml
2、根据配置文件创建relay,启动监听端口,接收请求
3、把接收到的请求写入到influxdb1-2节点
后面再研究下核心模块relay怎么把接收到的数据同时写入,influxdb多个节点。
- 设置WPF窗体全屏显示:
- winform 、WPF传值方式详解
- 你一定要知道!数据科学家提高工作效率的基本工具
- MySQL 大数据操作注意事项
- Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
- LINQ分页和排序,skip和Take 用法
- 这或许是对小白最友好的python入门了吧——21,导入模块
- opoa介绍
- 数据库记录安全解决方案
- 基于计算机视觉和OpenCV:创建一个能够计算道路交通流量的应用
- 这或许是对小白最友好的python入门了吧——20,定义函数简单应用
- 数据库结构版本控制
- Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错
- 【干货】什么?Python3.X不能输出中文?原来是编辑器geany的锅?!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (精编)Python与安全(三)SSTI服务器模板注入
- 一年经验Java开发0713面试
- 【分享】MicroBlaze大内部存储器(AXI BRAM)设计
- Spring Beans 自动装配
- Python将txt文件内容转换成列表
- 刷题记录-猿辅导2020
- redis stream(一):stream命令入门
- os.path.basename()
- 利用frida与ida实战脱壳360加固
- 你知道C语言中的危险函数吗?
- python与安全(四)shell反弹
- 怎么快速修复 bug ?
- 变量类型(cpu/gpu)
- 【Go语言学习】匿名函数与闭包
- Python中两种UnboundLocalError的解决方法