consul-demo/consul/consul-service.go

162 lines
4.1 KiB
Go

package consul
import (
"fmt"
consulapi "github.com/hashicorp/consul/api"
log "github.com/sirupsen/logrus"
)
const (
consulAddr string = "127.0.0.1:8500"
)
//Register 注册服务到consul
func Register(name string, addr string, port int, tags ...string) {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = consulAddr
client, err := consulapi.NewClient(config)
if err != nil {
log.WithFields(log.Fields{
"func": "Register",
}).Errorf("NewClient: %v", err)
return
}
// 创建注册到consul的服务到
registration := new(consulapi.AgentServiceRegistration)
registration.ID = fmt.Sprintf("%s-%s:%d", name, addr, port)
registration.Name = name
registration.Port = port
registration.Tags = tags
registration.Address = addr
// 增加consul健康检查回调函数
check := new(consulapi.AgentServiceCheck)
check.GRPC = fmt.Sprintf("%s:%d", registration.Address, registration.Port)
check.Timeout = "5s"
check.Interval = "5s"
check.DeregisterCriticalServiceAfter = "30s" // 故障检查失败30s后 consul自动将注册服务删除
registration.Check = check
// 注册服务到consul
if err := client.Agent().ServiceRegister(registration); err != nil {
log.WithFields(log.Fields{
"func": "Register",
}).Errorf("ServiceRegister: %v", err)
}
}
//DeRegister 取消consul注册的服务
func DeRegister(name string, addr string, port int) {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = consulAddr
client, err := consulapi.NewClient(config)
if err != nil {
log.WithFields(log.Fields{
"func": "DeRegister",
}).Errorf("%v", err)
}
client.Agent().ServiceDeregister(fmt.Sprintf("%s-%s:%d", name, addr, port))
}
//FindNode 查找节点
func FindNode(servicename string) (*consulapi.AgentService, error) {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = consulAddr
client, err := consulapi.NewClient(config)
if err != nil {
log.WithFields(log.Fields{
"func": "FindNode",
}).Errorf("NewClient: %v", err)
}
services, _, err := client.Health().Service(servicename, "", true, nil)
if err != nil {
return nil, err
}
for _, service := range services {
return service.Service, nil
}
return nil, nil
}
//FindServer 从consul中发现服务
func FindServer() {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = consulAddr
client, err := consulapi.NewClient(config)
if err != nil {
log.WithFields(log.Fields{
"func": "DeRegister",
}).Errorf("%v", err)
}
// 获取所有service
services, _ := client.Agent().Services()
for _, value := range services {
fmt.Println(value.Address)
fmt.Println(value.Port)
}
fmt.Println("=================================")
// 获取指定service
service, _, err := client.Agent().Service("demo", nil)
if err == nil {
fmt.Println(service.Address)
fmt.Println(service.Port)
}
s, _, _ := client.Health().Service("demo", "demo", true, nil)
for _, service := range s {
fmt.Println("service.Service.Address:", service.Service.Address, "service.Service.Port:", service.Service.Port)
}
}
//CheckHeath 健康检查
func CheckHeath() {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = "127.0.0.1:8500"
client, err := consulapi.NewClient(config)
if err != nil {
log.Fatal("consul client error : ", err)
}
// 健康检查
a, b, _ := client.Agent().AgentHealthServiceByID("111")
fmt.Println(a)
fmt.Println(b)
}
//KVTest test
func KVTest() {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = "127.0.0.1:8500"
client, err := consulapi.NewClient(config)
if err != nil {
log.Fatal("consul client error : ", err)
}
// KV, put值
values := "test"
key := "go-consul-test/127.0.0.1:8100"
client.KV().Put(&consulapi.KVPair{Key: key, Flags: 0, Value: []byte(values)}, nil)
// KV get值
data, _, _ := client.KV().Get(key, nil)
fmt.Println(string(data.Value))
// KV list
datas, _, _ := client.KV().List("go", nil)
for _, value := range datas {
fmt.Println(value)
}
keys, _, _ := client.KV().Keys("go", "", nil)
fmt.Println(keys)
}