consul安装和配置
网址传送门 consul官网
使用docker部署 ```bash 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界面,可以访问ip:8500进行访问(前提 防火墙已配置)- web展示<br />看到如上图说是 表示已成功部署,默认已注册一个服务<a name="FYoMW"></a># consul API接口<a name="YmJow"></a>## go```gopackage mainimport ("fmt""github.com/hashicorp/consul/api")func Register(address string, port int, name string, tags []string, id string) error {cfg := api.DefaultConfig()// consul 服务地址cfg.Address = "127.0.0.1:8500"client, err := api.NewClient(cfg)if err != nil {panic(err)}//生成对应的检查对象check := &api.AgentServiceCheck{// 健康检查 APIHTTP: "http://127.0.0.1:port/health", // 健康检查接口Timeout: "60s",Interval: "60s",DeregisterCriticalServiceAfter: "10s",}//生成注册对象registration := new(api.AgentServiceRegistration)registration.Name = nameregistration.ID = idregistration.Port = portregistration.Tags = tagsregistration.Address = addressregistration.Check = checkerr = client.Agent().ServiceRegister(registration)if err != nil {panic(err)}return nil}func AllServices() {cfg := api.DefaultConfig()// 当然是consul的地址了cfg.Address = "127.0.0.1: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 FilterSerivice() {cfg := api.DefaultConfig()// 当然是consul的地址了cfg.Address = "127.0.0.1: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("62.234.113.102", 8082, "user-web", []string{"shop", "shinxb"}, "user-web")//AllServices()//FilterSerivice()}
Py
- base.py ```python import abc
class Register(metaclass=abc.ABCMeta): @abc.abstractmethod def register(self, name, service_id, address, port, tags: list,check): pass
@abc.abstractmethod
def deregister(self, service_id):
pass
@abc.abstractmethod
def get_all_service(self, service_id):
pass
@abc.abstractmethod
def filter_service(self, filter):
pass
- consul.py
```python
import requests
from loguru import logger
from common.register.base import Register
class ConsulRegister(Register):
def __init__(self, host, port):
self.host = host
self.port = port
self.headers = {
"contentType": "application/json"
}
def register(self, name, service_id, address, port, tags: list,check=None):
url = f"http://{self.host}:{self.port}/v1/agent/service/register"
if check is None:
check = {
"GRPC": f'{address}:{port}',
"GRPCUseTLS": False,
"Timeout": "5s",
"Interval": "5s",
"DeregisterCriticalServiceAfter": "5s",
}
rsp = requests.put(url, headers=self.headers, json={
"Name": name,
"ID": service_id,
"Tags": tags,
"Address": address,
"Port": port,
"Check":check,
})
if rsp.status_code == 200:
logger.info("注册成功")
else:
logger.info(f"注册失败:{rsp.status_code}")
def deregister(self, service_id):
url = f"http://{self.host}:{self.port}/v1/agent/service/deregister/{service_id}"
rsp = requests.put(url, headers=self.headers)
if rsp.status_code == 200:
print("注销成功")
else:
print(f"注销失败:{rsp.status_code}")
def get_all_service(self, service_id):
url = f"http://{self.host}:{self.port}/v1/agent/service"
rsp = requests.get(url, headers=self.headers)
if rsp.status_code == 200:
print("获取服务列表成功")
else:
print(f"获取服务成功列表失败:{rsp.status_code}")
def filter_service(self, filter):
url = f"http://{self.host}:{self.port}/v1/agent/services"
params = {
"filter": filter
}
rsp = requests.get(url, params=params).json()
for key, value in rsp.items():
print(key)
