主要是通过request进行续期:
# --*-- coding=utf-8 --*--
# author BillFang
import time
import threading
import requests
from urllib.parse import urlencode
from sanic import Sanic
import json
from sanic.response import json as js
app = Sanic("python ap")
@app.get("/api/python")
def home(request):
print("你调用到这个地方了。。。{}")
return js({"helloe": "world"})
def add_instance(username, password, service_name, ip, port, cluster_name=None,
weight=1.0, metadata=None, ephemeral=True, group_name="DEFAULT_GROUP"):
params = {
"ip": ip,
"port": port,
"serviceName": service_name,
"weight": weight,
"enable": True,
"healthy": True,
"clusterName": cluster_name,
"ephemeral": ephemeral,
"groupName": group_name
}
nacos_config_url = "http://localhost:8848/nacos/v1/ns/instance"
resp = requests.post(url=nacos_config_url, data=params)
if resp.status_code == 200:
request_heart(username=username, password=password, service_name="python", ip=ip, port=port)
def request_heart(username, password, service_name, ip, port, cluster_name=None,
weight=1.0, metadata=None, ephemeral=True, group_name="DEFAULT_GROUP"):
while True:
nacos_config_url = "http://localhost:8848/nacos/v1/ns/instance/beat"
beat_data = dict()
beat_data["serviceName"] = service_name
beat_data["ip"] = ip
beat_data["port"] = port
beat_data["weight"] = weight
beat_data["ephemeral"] = ephemeral
if cluster_name is not None:
beat_data["cluster"] = cluster_name
if metadata is not None:
if isinstance(metadata, str):
beat_data["metadata"] = json.loads(metadata)
else:
beat_data["metadata"] = metadata
params = {
"serviceName": service_name,
"beat": json.dumps(beat_data),
"groupName": group_name
}
params.update({"username": username, "password": password})
url = "?".join([nacos_config_url, urlencode(params)]) if params else nacos_config_url
resp = requests.put(url=url, data=params)
print("已注册服务,执行心跳服务,续期服务 {}".format(resp.status_code))
time.sleep(3)
if __name__ == "__main__":
threading.Timer(3, add_instance, args=["nacos",
"nacos",
"python",
"localhost",
"8000"]).start()
app.run()