Golang 读取写入Etcd数据库
来源:互联网 发布:淘宝助理的使用方法 编辑:程序博客网 时间:2024/05/21 07:58
原文出处:个人博客地址:http://www.damonyi.cc/?p=194
项目中用到Etcd数据库来存储容器的信息和应用的域名信息,将操作Etcd的golang代码整理了一下
1、将Container信息写入到指定目录
c, err := common.GetEtcdClient()if err != nil {beego.Error("get etcd client failed")return}kapi := client.NewKeysAPI(c)key := getSkyDnsDomain(domainEtcd.Domain)value, _ := json.Marshal(domainEtcd)var etcderr errorcommon.HaproxyTemplateCache.Lock.Lock()defer common.HaproxyTemplateCache.Lock.Unlock()switch domainEtcd.Action {case "add":_, etcderr = kapi.Create(context.Background(), key, string(value))common.HaproxyTemplateCache.Data[domainEtcd.Domain] = &models.HaproxyConfigration{DomainEtcd: domainEtcd,}case "delete":_, etcderr = kapi.Delete(context.Background(), key, &client.DeleteOptions{})delete(common.HaproxyTemplateCache.Data, domainEtcd.Domain)}if etcderr != nil {beego.Error("updatecontainer event erro", etcderr)}
2、读取Etcd的缓存数据 example,只获取其中的非目录信息
func loadHaproxyTemplateCache() {HaproxyTemplateCache.Lock.Lock()defer HaproxyTemplateCache.Lock.Unlock()HaproxyTemplateCache.Data = make(map[string]*models.HaproxyConfigration)client1, _ := GetEtcdClient()api := client.NewKeysAPI(client1)/*set skydns domain info*/res, err1 := api.Get(context.Background(), "/skydns/local", &client.GetOptions{Recursive: true})if err1 != nil {beego.Error("get /dockerstack info failed")return}skydnsNodesInfo := make(map[string]string)getAllNode(res.Node, skydnsNodesInfo)var domain models.DomainEtcdfor _, domainStr := range skydnsNodesInfo {json.Unmarshal([]byte(domainStr), &domain)HaproxyTemplateCache.Data[domain.Domain].DomainEtcd = &domain}/*set dockerstack container info*/res, err1 = api.Get(context.Background(), "/dockerstack", &client.GetOptions{Recursive: true})if err1 != nil {beego.Error("get /dockerstack info failed")return}dockerstackNodesInfo := make(map[string]string)getAllNode(res.Node, dockerstackNodesInfo)var container models.ContainerEtcdfor _, containerStr := range skydnsNodesInfo {json.Unmarshal([]byte(containerStr), &container)HaproxyTemplateCache.Data[domain.Domain].Containers[container.ContainerId] = &container}}func getAllNode(rootNode *client.Node, nodesInfo map[string]string) {if !rootNode.Dir {nodesInfo[rootNode.Key] = rootNode.Valuereturn}for node := range rootNode.Nodes {getAllNode(rootNode.Nodes[node], nodesInfo)}}
附 etcd存储的数据结构信息:
//the container info in etcdtype ContainerEtcd struct {HostIp stringHostPort int64Domain stringContainerId stringContainerIp stringContainerPort int64Action string}//domain info in etcdtype DomainEtcd struct {Port int64Host stringDomain stringAction string}type HaproxyConfigration struct {DomainEtcd *DomainEtcdContainers map[string]*ContainerEtcd}type HaproxyTemplateCache struct {Data map[string]*HaproxyConfigrationLock sync.RWMutex}
本文只是想提供一些代码参考,业务内容就不细讲了。。
0 0
- Golang 读取写入Etcd数据库
- golang基础-etcd介绍与使用、etcd存取值、etcd监测数据写入
- golang 创建,读取,写入文件
- etcd golang watch
- golang etcd环境搭建
- Etcd client golang example code
- 读取文件并写入数据库
- Java文件读取,写入数据库
- golang时间从数据库读取时间
- Oracle空间数据库的读取与写入
- Oracle空间数据库的读取与写入
- php如何读取文件并写入数据库
- 将图片写入数据库和读取
- c#大文件读取和写入数据库
- 从数据库中读取和写入文件
- [GridView]读取本地EXCEL 并写入数据库
- PHP 读取文本文件内容写入数据库
- 将图片写入数据库和读取
- 淘宝直通车图片创意对比测试实例(用数据说话)
- Linux下安装xwindow图形界面
- [Leetcode]371. Sum of Two Integers
- slt迭代器失效
- Activiti进阶(九)——开始活动节点
- Golang 读取写入Etcd数据库
- dom对象模型-浏览器对象的分层结构图
- 实时操作系统Vxworks与通用操作系统Linux的比较+实模式等三种模式 DMA
- MySQL 查询指定数量的表数据
- ionic开发Android App学习笔记
- Error: Expected resource of type raw [ResourceType
- Codeforces Beta Round #1 C. Ancient Berland Circus
- 传智播客Spring MVC教案
- 验证码实现详解