consul 注册中心使用

主要实现 分布式注册中心、服务注册、服务发现、健康检测

官方文档

 

开始安装运行

docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client=0.0.0.0

 

修改为自启动

docker container update --restart=always consul

 

web界面打开注册中心:localhost:8500

dns服务器端口为 8600

 

下载 bind 工具 测试 dns 是否正常工作

dig @127.0.0.1 -p 8600 consul.service.consul SRV

 

实践 服务注册(可以配置 Check 进行健康检查)

 

 

实践 服务注销(后面跟上是服务 Id)

 

 

web 层服务注册与发现

package initialize

import (
    "fmt"
    "github.com/hashicorp/consul/api"
    "sync"
)

var clientOnce sync.Once
var ConsulClient *api.Client

// GetConsulClient 实例化注册中心客户端
func GetConsulClient() *api.Client {
    // 连接注册中心
    clientOnce.Do(func() {
        cfg := api.DefaultConfig()
        cfg.Address = "127.0.0.1:8500"

        var err error
        
        ConsulClient,err = api.NewClient(cfg)
        if err != nil {
            panic(err)
        }
    })
    
    return ConsulClient
}

// ConsulRegister 开始注册
func ConsulRegister(address string, port int,name string,tags []string,id string) {
    // 生成注册对象
    register := new(api.AgentServiceRegistration)
    register.Name = name
    register.ID = id
    register.Port = port
    register.Tags = tags
    register.Address = address

    // 生成对应的检查对象
    check := &api.AgentServiceCheck{
        HTTP: "http://192.168.1.8:8080/health",
        Timeout: "5s", // 超时
        Interval: "5s", // 检查间隔
        DeregisterCriticalServiceAfter: "10s", //注册失败10s后取消注册
    }
    register.Check = check

    // 开始注册
    err := GetConsulClient().Agent().ServiceRegister(register)
    if err != nil {
        panic(err)
    }
}

// ConsulServices 全部服务
func ConsulServices() {
    data,err := GetConsulClient().Agent().Services()
    if err != nil {
        panic(err)
    }
    for key,value := range data{
        fmt.Println(key,value)
    }
}

// ConsulFilter 服务过滤
func ConsulFilter() {
    data,err := GetConsulClient().Agent().ServicesWithFilter(`Service == "micro-web1"`) // 通过服务名称过滤
    if err != nil {
        panic(err)
    }
    for key,value := range data{
        fmt.Println(key,value)
    }
}

 

posted @ 2022-03-09 15:09  JaydenQiu  阅读(250)  评论(0)    收藏  举报