zoukankan      html  css  js  c++  java
  • consul golang

    服务注册:

    package main
    
    import (
    	"log"
    	"github.com/gin-gonic/gin"
    	consulapi "github.com/hashicorp/consul/api"
    	"fmt"
    	"net/http"
    )
    
    
    func main() {
    
    	// 服务注册
    	registerServer()
    
    	r := gin.Default()
    	r.GET("/ping", heathCheck)
    	r.Run()
    }
    
    // consul 服务注册
    func registerServer()  {
    
    	// 创建consul客户端
    	config := consulapi.DefaultConfig()
    	config.Address = "172.16.30.129:8500"
    	client, err := consulapi.NewClient(config)
    	if err != nil {
    		log.Fatal("consul client error : ", err)
    	}
    
    	registration := new(consulapi.AgentServiceRegistration)
    	registration.ID = "c1"      // 服务节点的名称
    	registration.Name = "wsp"      // 服务名称
    	registration.Port = 8080              // 服务端口
    	registration.Tags = []string{"wsp"} // tag,可以为空
    	registration.Address = "192.168.43.253"      // 服务 IP
    
    	// 健康检查 支持http及grpc 回调接口
    	checkPort := 8080
    	registration.Check = &consulapi.AgentServiceCheck{ // 健康检查
    		HTTP:                           fmt.Sprintf("http://%s:%d%s", registration.Address, checkPort, "/ping"),
    		Timeout:                        "3s", // 超时时间
    		Interval:                       "5s",  // 健康检查间隔
    		DeregisterCriticalServiceAfter: "30s", //check失败后30秒删除本服务,注销时间,相当于过期时间
    		// GRPC:     fmt.Sprintf("%v:%v/%v", IP, r.Port, r.Service),// grpc 支持,执行健康检查的地址,service 会传到 Health.Check 函数中
    	}
    
    	// 服务注册
    	err = client.Agent().ServiceRegister(registration)
    	if err != nil {
    		log.Fatal("register server error : ", err)
    	}
    }
    
    // consul 健康检测
    func heathCheck(c *gin.Context)  {
    	c.JSON(http.StatusOK, "ok")
    }
    

      服务发现:

    package main
    
    import (
    	"log"
    	consulapi "github.com/hashicorp/consul/api"
    	"fmt"
    )
    
    
    func main() {
    
    	// 服务发现
    	discoverServer()
    }
    
    // consul 服务注册
    func discoverServer()  {
    
    	// 创建consul客户端
    	config := consulapi.DefaultConfig()
    	config.Address = "172.16.30.129:8500"
    	client, err := consulapi.NewClient(config)
    	if err != nil {
    		log.Fatal("consul client error : ", err)
    	}
    
    	// 服务发现
    	services, _, err := client.Health().Service("wsp", "wsp", true, &consulapi.QueryOptions{})
    	if err != nil {
    		log.Println("error retrieving instances from Consul: %v", err)
    	}
    	// service 遍历
    	for _, service := range services {
    		fmt.Println("service.Service.Address:", service.Service.Address, "service.Service.Port:", service.Service.Port)
    	}
    }
    

      kv存储:

    package main
    
    import (
    	"log"
    	consulapi "github.com/hashicorp/consul/api"
    	"fmt"
    	"code.admaster.co/social/tuice-wechat/data"
    )
    
    
    func main() {
    
    	// 创建consul客户端
    	config := consulapi.DefaultConfig()
    	config.Address = "172.16.30.129:8500"
    	client, err := consulapi.NewClient(config)
    	if err != nil {
    		log.Fatal("consul client error : ", err)
    	}
    	//kv := &consulapi.KVPair{Key:"wsp", Value:[]byte(`{"level":"info"}`)}
    	//client.KV().Put(kv, nil)
    	data, _ , _ := client.KV().Get("wsp", nil)
    	fmt.Println(string(data.Value))
    
    }
    

      watch机制:

    package main
    
    import (
    	"log"
    	"github.com/gin-gonic/gin"
    	consulapi "github.com/hashicorp/consul/api"
    	"fmt"
    	"net/http"
    )
    
    
    func main() {
    
    	r := gin.Default()
    	r.GET("/watch", heathCheck2)
    	r.Run(":8081")
    }
    
    // consul 健康检测
    func heathCheck2(c *gin.Context)  {
    	config := consulapi.DefaultConfig()
    	config.Address = "172.16.30.129:8500"
    	client, err := consulapi.NewClient(config)
    	if err != nil {
    		log.Fatal("consul client error : ", err)
    	}
    	data, _ , _ := client.KV().Get("wsp", nil)
    	fmt.Println(string(data.Value))
    	c.JSON(http.StatusOK, "ok")
    }
    

      配置文件:

    {
      "watches": [
        {
          "type": "key",
          "key": "wsp",
          "handler_type": "http",
          "http_handler_config": {
             "path":"http://192.168.43.253:8081/watch",
             "method": "GET",
             "timeout": "10s",
             "tls_skip_verify": false
          }
        }
      ]
    }
    

      

  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/hcy-fly/p/12006745.html
Copyright © 2011-2022 走看看