Naco安装、配置、使用request接口交互

1. Docker安装Naco

官方文档https://nacos.io/zh-cn/docs/quick-start-docker.html,然而自己部署的时候遇到了“Database not set”的问题。有可能是因为环境中已经部署了3306的mysql服务导致的。(虽然我尝试修改了naco的docker-compose,但是未果,遂放弃)

安装过程参考文章:https://blog.csdn.net/ilvjiale/article/details/129417768

docker pull nacos/nacos-server

mkdir -p /mydata/nacos/logs/                      #新建logs目录
mkdir -p /mydata/nacos/conf/						#新建conf目录


docker run -p 8848:8848 --name nacos -d nacos/nacos-server

docker cp nacos:/home/nacos/logs/ /mydata/nacos/
docker cp nacos:/home/nacos/conf/ /mydata/nacos/

docker rm -f nacos

## 随后去数据库中创建表nacos_config,并执行下列sql
## https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql

## 然后重启
docker run -d --name nacos -p 8848:8848  -p 9848:9848 -p 9849:9849 --privileged=true -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -v /mydata/nacos/logs/:/home/nacos/logs -v /mydata/nacos/conf/:/home/nacos/conf/ --restart=always nacos/nacos-server

修改配置文件

# 在宿主机中修改application.properties文件
vim /mydata/nacos/conf/application.properties

# 修改下列内容
spring.datasource.platform=mysql
db.num=1
## 这里我是用docker的内置网络进行DNS解析,因此使用的image的名字mysql_server来进行关联的
db.url.0=jdbc:mysql://mysql_server:3306/nacos-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root

进入页面
http://ip:8848/nacos/index.html

2. 鉴权

直接访问http://ip:8848/nacos/index.html是裸奔,因此要配置账号密码

参考https://nacos.io/zh-cn/docs/v2/guide/user/auth.html,https://juejin.cn/post/7281201055627493413

### If turn on auth system:
nacos.core.auth.enabled=false

### If turn on auth system:
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true

然后再去http://ip:8848/nacos/index.html就有密码了。默认是nacos/nacos

3. 自己写服务的操作

SpringBoot
Flask

以下代码均通过v1的接口实现。接口文档参考“https://nacos.io/zh-cn/docs/v2/guide/user/open-api#1.2”

通过request的方法实现注册

import requests
from flask import Flask, make_response
import time
# 用于异步处理心跳检测
import threading
import json

app = Flask(__name__)

IP = "XXXXXXX"
PORT = 5030



data = {
    "serviceName": "pythonservice",
    "ip": IP,
    'port': PORT,
    'namespaceId': 'XXXX',
    'USERNAME': 'XXXX',
    'PASSWORD': 'XXXX',
    "metadata": json.dumps({"version":"v1.0", "message": "测试数据"})
}

print(data)


# 服务注册
def service_register():
    url = "http://127.0.0.1:8848/nacos/v1/ns/instance"
    res = requests.post(url, data=data)
    print(res.text, type(res))
    print("完成注册")


# 心跳检测
def service_beat():
    while True:
        url = "http://127.0.0.1:8848/nacos/v1/ns/instance/beat"
        res = requests.put(url, data=data)
        print(f"心跳检测中... 响应状态码: {res.status_code}", res.text)
        time.sleep(5)


@app.route('/test', methods=['GET'])
def test():
    response = make_response("部署成功")
    return response


if __name__ == '__main__':
    service_register()

    # 创建定时器,每5秒调用一次my_function函数
    timer = threading.Timer(5.0, service_beat)
    # 启动定时器
    timer.start()

    app.run('0.0.0.0', PORT)




request方法实现服务发现
由于这里是get请求,不接受data

要把用户名密码放到header中,并且url要带上serviceName和namespaceId

import requests

# 服务发现
def service_find():

    headers = {
        'USERNAME': 'xxxx',
        'PASSWORD': 'xxxx'
    }

    url = "http://xxxxx:8848/nacos/v1/ns/instance/list?serviceName=pythonservice&namespaceId=xxxxx"
    res = requests.get(url,  headers=headers)
    print(res.text, type(res), res)


if __name__ == '__main__':
    service_find()

通过sdk的方式完成注册(由于python的库版本太老,并且不支持新版naco,因此放弃)

你可能感兴趣的:(python)