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

不多说,开搞~

1、main.go

 package main

 import (
"flag"
"fmt"
"log"
"os"
"os/signal" "github.com/influxdata/influxdb-relay/relay"
) var (
//influxdb-realy启动时接收的配置文件参数,因为是falg.String所以接收的是一个字符串类型的参数
//flag.String 函数第一个参数代表启动时参数的名称,第二个参数代表默认值,第三个参数代表用途描述,此方法返回一个指针
//那么启动realy时应该是这个样子的: ./influxdb-relay -config relay.toml ———— "-config" 就是匹配上面flag.String函数第一个参数, "relay.toml" 是-config的值,这里代表配置文件的路径
configFile = flag.String("config", "", "Configuration file to use")
) func main() {
//flag.Parse是用来解析启动时传入的参数,必须调用
flag.Parse() //如果启动参数,配置文件路径为空
if *configFile == "" {
//记录日志
fmt.Fprintln(os.Stderr, "Missing configuration file")
//打印需要的参数提示,也就是会输出上面flag.String函数第三个参数
flag.PrintDefaults()
//退出
os.Exit()
}
//加载配置文件
cfg, err := relay.LoadConfigFile(*configFile)
//LoadConfigFile方法如下: 主要做的事情是把配置文件反序列化成一个Config对象然后return,也就是cfg
// func LoadConfigFile(filename string) (cfg Config, err error) {
// f, err := os.Open(filename)
// if err != nil {
// return cfg, err
// }
// defer f.Close()
// return cfg, toml.NewDecoder(f).Decode(&cfg)
// }
if err != nil {
fmt.Fprintln(os.Stderr, "Problem loading config file:", err)
}
//根据Config对象 创建relay组件
r, err := relay.New(cfg)
if err != nil {
log.Fatal(err)
}
//定义接收操作系统信号的channel
sigChan := make(chan os.Signal, )
//notify用于监听信号,如果操作系统向当前进程发送中断信号(os.Interrupt 表示中断信号)
signal.Notify(sigChan, os.Interrupt)
//如果接收到中断信号,开一个协程调用relay的Stop方法 停止http监听
go func() {
<-sigChan
r.Stop()
}() log.Println("starting relays...")
//relay 运行
r.Run()
}

2、配置文件 relay.toml

 [[http]]
name = "example-http"
bind-addr = "127.0.0.1:9096"
output = [
{ name="influxdb-1", location = "http://127.0.0.1:8086/write" },
{ name="influxdb-2", location = "http://127.0.0.1:7086/write" },
] [[udp]]
name = "example-udp"
bind-addr = "127.0.0.1:19096"
read-buffer = # default
output = [
{ name="influxdb-1", location="127.0.0.1:8089", mtu= },
{ name="influxdb-", location="127.0.0.1:7089", mtu= },
]

总结:

1、加载配置文件 relay.toml

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

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

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

go开源项目influxdb-relay源码分析(一)的更多相关文章

  1. 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)

    转自:http://blog.csdn.net/kuerjinjin/article/details/23563059 从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用w ...

  2. Android开源项目 Universal imageloader 源码研究之Lru算法

    https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...

  3. Android开源项目 Universal imageloader 源码研究之项目框架

    Universal imageloader 的代码并不复杂 重点是缓存,线程池任务 下面都用UML图进行了绘制 基本使用流程就是 初始化配置,设置Options参数,最后Dispaly提交下载 pub ...

  4. 「从零单排canal 03」 canal源码分析大纲

    在前面两篇中,我们从基本概念理解了canal是一个什么项目,能应用于什么场景,然后通过一个demo体验,有了基本的体感和认识. 从这一篇开始,我们将从源码入手,深入学习canal的实现方式.了解can ...

  5. 介绍开源的.net通信框架NetworkComms框架 源码分析

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 售价249英镑 我曾经花了 ...

  6. MyBatis 源码分析-项目总览

    MyBatis 源码分析-项目总览 1.概述 本文主要大致介绍一下MyBatis的项目结构.引用参考资料<MyBatis技术内幕> 此外,https://mybatis.org/mybat ...

  7. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  8. 开源分布式数据库中间件MyCat源码分析系列

    MyCat是当下很火的开源分布式数据库中间件,特意花费了一些精力研究其实现方式与内部机制,在此针对某些较为重要的源码进行粗浅的分析,希望与感兴趣的朋友交流探讨. 本源码分析系列主要针对代码实现,配置. ...

  9. 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer ...

  10. 开源网站流量统计系统Piwik源码分析——参数统计(一)

    Piwik现已改名为Matomo,这是一套国外著名的开源网站统计系统,类似于百度统计.Google Analytics等系统.最大的区别就是可以看到其中的源码,这正合我意.因为我一直对统计的系统很好奇 ...

随机推荐

  1. 给iOS开发新手送点福利,简述UIView的属性和用法

    UIView 1.alpha 设置视图的透明度.默认为1. // 完全透明 view.alpha = 0; // 不透明 view.alpha = 1; 2.clipsToBounds // 默认是N ...

  2. linux中grep工具

    正则表达式 以前我们用grep在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义.其实grep还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合xxxxx@xxxx. ...

  3. 学习了django对于sqlite3进行了了解,谈谈看法

    学习了django对于sqlite3进行了了解,谈谈看法 由于django默认使用的是sqlite3,写了几个建表语句, 然后数据做下迁移,其实就是建表语句的执行. 一直对sqlite3没有一个直观的 ...

  4. Maven配置本地仓库

    当我们在myeclipse中update maven时可能会报错User setting file does not exist C:\Users\lenevo\.m2\setting.xml,以致于 ...

  5. LINQPad 4 初次使用心得

    最近学习EntityFramework,于是接触了LinqPad这款享誉已久的软件,深感相见恨晚.软件具体不多做介绍了,只简单介绍下使用方法. 数据库操作 添加数据库连接 1,首先通过点击Add co ...

  6. 实现socketChannel 通信例子

    https://blog.csdn.net/qq_33935895/article/details/79678345

  7. tomcat加固

    tomcat安全加固和规范 tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐.不过,在默认配置下其存在一定的安全隐患, ...

  8. 迷你MVVM框架 avalonjs 沉思录 第3节 动态模板

    模板的发明是编程史上的一大里程碑,让我们摆脱了烦锁且易出错的字符串拼接,维护性大大提高. 都在JSP,ASP时代,人们已经学会使用include等语句,将多个页面片断拼接成一个页面. 此外,为了将数据 ...

  9. jsp脚本语法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  10. Linux学习-linux系统下python升级到python3.6步骤详解,以及遇到的问题解决

    说明:一般linux会自带pyhton2.7 1.首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: wget http://www.python.org/ftp/python/ ...