经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
go开源项目influxdb-relay源码分析(一)
来源:cnblogs  作者:嘿嘿果宝  时间:2018/9/25 20:30:17  对本文有异议

influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果。

不多说,开搞~

1、main.go

  1. 1 package main
  2. 2
  3. 3 import (
  4. 4 "flag"
  5. 5 "fmt"
  6. 6 "log"
  7. 7 "os"
  8. 8 "os/signal"
  9. 9
  10. 10 "github.com/influxdata/influxdb-relay/relay"
  11. 11 )
  12. 12
  13. 13 var (
  14. 14 //influxdb-realy启动时接收的配置文件参数,因为是falg.String所以接收的是一个字符串类型的参数
  15. 15 //flag.String 函数第一个参数代表启动时参数的名称,第二个参数代表默认值,第三个参数代表用途描述,此方法返回一个指针
  16. 16 //那么启动realy时应该是这个样子的: ./influxdb-relay -config relay.toml ———— "-config" 就是匹配上面flag.String函数第一个参数, "relay.toml" 是-config的值,这里代表配置文件的路径
  17. 17 configFile = flag.String("config", "", "Configuration file to use")
  18. 18 )
  19. 19
  20. 20 func main() {
  21. 21 //flag.Parse是用来解析启动时传入的参数,必须调用
  22. 22 flag.Parse()
  23. 23
  24. 24 //如果启动参数,配置文件路径为空
  25. 25 if *configFile == "" {
  26. 26 //记录日志
  27. 27 fmt.Fprintln(os.Stderr, "Missing configuration file")
  28. 28 //打印需要的参数提示,也就是会输出上面flag.String函数第三个参数
  29. 29 flag.PrintDefaults()
  30. 30 //退出
  31. 31 os.Exit(1)
  32. 32 }
  33. 33 //加载配置文件
  34. 34 cfg, err := relay.LoadConfigFile(*configFile)
  35. 35 //LoadConfigFile方法如下: 主要做的事情是把配置文件反序列化成一个Config对象然后return,也就是cfg
  36. 36 // func LoadConfigFile(filename string) (cfg Config, err error) {
  37. 37 // f, err := os.Open(filename)
  38. 38 // if err != nil {
  39. 39 // return cfg, err
  40. 40 // }
  41. 41 // defer f.Close()
  42. 42 // return cfg, toml.NewDecoder(f).Decode(&cfg)
  43. 43 // }
  44. 44 if err != nil {
  45. 45 fmt.Fprintln(os.Stderr, "Problem loading config file:", err)
  46. 46 }
  47. 47 //根据Config对象 创建relay组件
  48. 48 r, err := relay.New(cfg)
  49. 49 if err != nil {
  50. 50 log.Fatal(err)
  51. 51 }
  52. 52 //定义接收操作系统信号的channel
  53. 53 sigChan := make(chan os.Signal, 1)
  54. 54 //notify用于监听信号,如果操作系统向当前进程发送中断信号(os.Interrupt 表示中断信号)
  55. 55 signal.Notify(sigChan, os.Interrupt)
  56. 56 //如果接收到中断信号,开一个协程调用relay的Stop方法 停止http监听
  57. 57 go func() {
  58. 58 <-sigChan
  59. 59 r.Stop()
  60. 60 }()
  61. 61
  62. 62 log.Println("starting relays...")
  63. 63 //relay 运行
  64. 64 r.Run()
  65. 65 }

2、配置文件 relay.toml

  1. 1 [[http]]
  2. 2 name = "example-http"
  3. 3 bind-addr = "127.0.0.1:9096"
  4. 4 output = [
  5. 5 { name="influxdb-1", location = "http://127.0.0.1:8086/write" },
  6. 6 { name="influxdb-2", location = "http://127.0.0.1:7086/write" },
  7. 7 ]
  8. 8
  9. 9 [[udp]]
  10. 10 name = "example-udp"
  11. 11 bind-addr = "127.0.0.1:19096"
  12. 12 read-buffer = 0 # default
  13. 13 output = [
  14. 14 { name="influxdb-1", location="127.0.0.1:8089", mtu=512 },
  15. 15 { name="influxdb-2", location="127.0.0.1:7089", mtu=1024 },
  16. 16 ]

 

总结:

1、加载配置文件 relay.toml

2、根据配置文件创建relay,启动监听端口,接收请求

3、把接收到的请求写入到influxdb1-2节点

 

后面再研究下核心模块relay怎么把接收到的数据同时写入,influxdb多个节点。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号