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
      }
    }
  ]
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM