consul的状态注册和发现及检查
一. 使用requests使用注册
1. python服务注册及检查
可以对http接口和grpc接口进行状态健康检测
import requests headers = { "contentType": "application/json" } def register(name, id, address, port): url = "http://192.168.1.103:8500/v1/agent/service/register" print(f"http://{address}:{port}/health") rsp = requests.put(url, headers=headers, json={ "Name": name, "ID": id, "Tags": ["mxshop", "bobby", "imooc", "web"], "Address": address, "Port": port,
# 服务检查 "Check": { "GRPC": f"{address}:{port}", "GRPCUseTLS": False, "Timeout": "5s", "Interval": "5s", "DeregisterCriticalServiceAfter": "15s" } }) if rsp.status_code == 200: print("注册成功") else: print(f"注册失败:{rsp.status_code}") def deregister(id): url = f"http://192.168.1.103:8500/v1/agent/service/deregister/{id}" rsp = requests.put(url, headers=headers) if rsp.status_code == 200: print("注销成功") else: print(f"注销失败:{rsp.status_code}") def filter_service(name): url = "http://192.168.1.103:8500/v1/agent/services" params = { "filter": f'Service == "{name}"' } rsp = requests.get(url, params=params).json() for key, value in rsp.items(): print(key) if __name__ == "__main__": # register("mshop-web", "mshop-web", "192.168.1.102", 50051) # deregister("mshop-web") filter_service("user-srv")
2. python三方库服务注册及检查
# 按照pip install python-consul2
import consul
c = consul.Consul(host="192.168.1.103")
address = "192.168.1.102"
port = 50051
check = {
"GRPC": f"{address}:{port}",
"GRPCUseTLS": False,
"Timeout": "5s",
"Interval": "5s",
"DeregisterCriticalServiceAfter": "15s"
}
# 注册
# rsp = c.agent.service.register(name="user-srv", service_id="user-srv2",
# address=address, port=port, tags=["mxshop"],check=check)
rsp = c.agent.services()
for key, val in rsp.items():
# 注销
rsp = c.agent.service.deregister(key)
# print(rsp)
3. gin 集成consul
package main
import (
"fmt"
"github.com/hashicorp/consul/api"
)
func Register(address string, port int, name string, tags []string, id string) error {
//服务注册
cfg := api.DefaultConfig()
cfg.Address = "192.168.1.103:8500"
client, err := api.NewClient(cfg)
if err != nil {
panic(err)
}
//生成对应的检查对象
check := &api.AgentServiceCheck{
HTTP: "http://192.168.1.102:8021/health",
Timeout: "5s",
Interval: "5s",
DeregisterCriticalServiceAfter: "10s",
}
//生成注册对象
registration := new(api.AgentServiceRegistration)
registration.Name = name
registration.ID = id
registration.Port = port
registration.Tags = tags
registration.Address = address
registration.Check = check
//注册
err = client.Agent().ServiceRegister(registration)
//client.Agent().ServiceDeregister()
if err != nil {
panic(err)
}
return nil
}
func AllServices() {
//获取所有的服务
cfg := api.DefaultConfig()
cfg.Address = "192.168.1.103:8500"
client, err := api.NewClient(cfg)
if err != nil {
panic(err)
}
data, err := client.Agent().Services()
if err != nil {
panic(err)
}
for key, _ := range data {
fmt.Println(key)
}
}
func FilterService() {
cfg := api.DefaultConfig()
cfg.Address = "192.168.1.103:8500"
client, err := api.NewClient(cfg)
if err != nil {
panic(err)
}
data, err := client.Agent().ServicesWithFilter(`Service == "user-web"`)
if err != nil {
panic(err)
}
for key, _ := range data {
fmt.Println(key)
}
}
func main() {
//_ = Register("192.168.1.102", 8021, "user-web", []string{"mxshop", "bobby"}, "user-web")
//AllServices()
//FilterSerivice()
fmt.Println(fmt.Sprintf(`Service == "%s"`, "user-srv"))
}

浙公网安备 33010602011771号