注册的本质
Django注册到Nacos的本质就是像Nacos注册中心发送请求,请求有一定的格式要求,比如得将ip和port放前面再加上服务名称,命名空间等:
nacos_client_python介绍
服务于nacos的自动化服务注册插件
推荐使用py3.7或以上环境使用 基本上是模块化的Nacos open-api,使用参数与open-api一致。 并提供了nacos实例的自动心跳包功能
安装教程
源码安装
git clone https://gitee.com/hubert22/nacos_client_python.git
cd nacos_client_python
python setup.py install
实现
在有manage.py的目录中创建一个NacosClient.py,改完基本配置之后,运行main函数即可。 这里用的uvicorn,也可以用其他asgi服务器~
import uvicorn
from nacos_client_python.nacos import NacosClient
def register_server_to_nacos(service_ip, port, service_name, namespaceId, namespace, group):
"""
注册服务到nacos
:param service_ip: django启动的服务所在的ip
:param port: django启动的服务所在的端口
:param service_name: 服务名称
:param namespaceId: 命名空间Id
:param namespace: 命名空间
:return: None
"""
nacos_client = NacosClient('http://10.27.128.158', 8848)
try:
response = nacos_client.instance().register(ip=service_ip, port=port, serviceName=service_name, ephemeral=True )
print('register', response)
except Exception as e:
print('register err:')
print(e.__str__())
try:
response = nacos_client.instance().detail(ip=service_ip, port=port, serviceName=service_name,
namespaceId=namespaceId)
print('detail', response)
except Exception as e:
print(e.__str__())
try:
response = nacos_client.instance().auto_beat(ip=service_ip, port=port, serviceName=service_name,
namespaceId=namespaceId)
print('send_beat', response)
except Exception as e:
print('send beat err:')
print(e.__str__())
if __name__ == '__main__':
service_ip = '10.27.128.158'
service_name = 'service.django'
namespaceId = '628da9e7-d34d-4e0c-b87e-118807ecca70'
namespace = 'hsc-nwpu-django-namespace'
group = 'hsc-nwpu-django-group'
port = 8888
register_server_to_nacos(service_ip, port, service_name, namespaceId, namespace, group)
uvicorn.run("app_backen.asgi:application", host="0.0.0.0", port=port, log_level="info", reload=False)
注意点1:实例化client对象的ip地址需要加“http://”
注意点2:ephemeral该字段表示注册的实例是否是临时实例还是持久化实例
ephemeral为true对应的是服务健康检查模式中的 client 模式,为false对应的是 server 模式
client模式需要通过心跳上报方式告知服务端(nacos注册中心)健康状态;
server模式由服务端(nacos注册中心)主动探测健康状态
注意点3:如果nacos_client.instance()会报错
是因为装nacos_client_python之前装过官方提供的nacos的sdk,要么删掉之前装的nacos,要么把源码放到项目里来,from源码进行import,如上所示。
注意点4:这里register()detail()auto_beat()里参数的顺序都不能随便换
因为内部发送请求时,发出的请求里的参数的顺序是按照调用这些方法的参数顺序写的。
注册成功:
打开Nacos页面(基本上就是http://127.0.0.1:8848/nacos/) Nacos的安装网上资料很多,不赘述了。
|