当前位置:   article > 正文

【Python】Python注册微服务到nacos_python nacos

python nacos

Python注册微服务到Nacos

1.Nacos部署

  • github 的nacos项目的发布页(Releases · alibaba/nacos · GitHub ),选择所要下载的nacos版本,在nacos下方的assets中选择安装包进行下载。

  • 解压nacos安装包到指定目录。

    tar -zxvf nacos-server-2.0.3.tar.gz
  • 初始化Nacos数据库。

    1. -- 需要先选择数据库
    2. -- 初始化sql脚本位于解压的 nacos/conf 目录下
    3. use nacosdb;
    4. source /euansu/apps/nacos/conf/nacos-mysql.sql;
  • 修改nacos配置文件。

    1. # nacos/conf/application.properties
    2. # 默认的web路由
    3. server.servlet.contextPath=/nacos
    4. # web服务端口
    5. server.port=8848
    6. # 数据库配置
    7. db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    8. db.user.0=nacos
    9. db.password.0=nacos
  • 启动Nacos服务,这里只是以单机模式启动Nacos。

    bin/startup.sh -m standalone

    启动完成之后,访问页面进行验证。

    如果没有在配置文件中修改密码,这里的用户名和密码是:nacos/nacos,直接登录即可。

2.Nacos验证

Nacos注册接口(注册一个实例服务到Naocs上)

  • 请求地址:/nacos/v1/ns/instance
  • 请求方式:POST

  • 请求参数:

    名称类型是否必选描述
    ip字符串服务实例IP
    portint服务实例port
    namespaceId字符串命名空间ID
    weightdouble权重
    enabledboolean是否上线
    healthyboolean是否健康
    metadata字符串扩展信息
    clusterName字符串集群名
    serviceName字符串服务名
    groupName字符串分组名
    ephemeralboolean是否临时实例
  • 返回参数:

    返回代码描述语义
    400Bad Request客户端请求中的语法错误
    403Forbidden没有权限
    404Not Found无法找到资源
    500Internal Server Error服务器内部错误
    200OK正常
  • 请求测试:

    请求接口后,在Nacos页面出现注册的服务,如下:

    查看详细信息

Nacos服务检测接口:

  • 请求地址:/nacos/v1/ns/instance/beat
  • 请求方式:PUT

  • 请求参数:

    名称类型是否必选描述
    serviceName字符串服务名
    ip字符串服务实例IP
    portint服务实例PORT
    namespaceId字符串命名空间ID
    groupName字符串分组名
    ephemeralboolean是否临时实例
    beatJSON格式字符串实例心跳内容
  • 响应参数:

    响应代码描述语义
    400Bad Request客户端请求中的语法错误
    403Forbidden没有权限
    404Not Found无法找到资源
    500Internal Server Error服务器内部错误
    200OK正常
  • 请求测试:

将Python服务注册到Nacos上至少需要两个接口,一个是实例注册接口,另一个则是心跳接口,只进行了注册,则会出现如下的情况:

时间稍长之后,注册的服务也会消失。

因此,需要按照心跳时间请求nacos服务检测接口,默认是5s。

3.Python注册Nacos服务

Python这里可以通过写一个脚本实现Nacos服务的注册,实现代码如下:

  1. import time
  2. import requests
  3. # 心跳时间
  4. HEARTBEATS_TIME = 5
  5. # Nacos地址
  6. NACOS_URL = 'http://xx.xx.xx.xx:8848/nacos'
  7. # 服务注册路由
  8. NACOR_REGISTER_URL = 'v1/ns/instance'
  9. # 心跳检测路由
  10. NACOS_HEARTBEATS_URL = 'v1/ns/instance/beat'
  11. # Nacos服务注册
  12. def service_register():
  13.    """
  14.   Nacos服务注册的接口有以下参数:
  15.   ip       服务实例IP
  16.   port   服务实例port
  17.   namespaceId 命名空间ID
  18.   weight   权重
  19.   enabled   是否上线
  20.   healthy   是否健康
  21.   metadata 扩展信息
  22.   clusterName 集群名
  23.   serviceName 服务名
  24.   groupName 分组名
  25.   ephemeral 是否临时实例
  26.   :return:
  27.   """
  28.    # 返回参数
  29.    result = {
  30.        "code": 200,
  31.        "message": "success"
  32.   }
  33.    # 构造请求参数
  34.    params = {
  35.        'serviceName': 'python-service',
  36.        'ip': 'xx.xx.xx.xx',
  37.        'port': 8845
  38.   }
  39.    response = requests.post(
  40.        "{NACOS_URL}/{NACOR_REGISTER_URL}".format(NACOS_URL=NACOS_URL, NACOR_REGISTER_URL=NACOR_REGISTER_URL),
  41.        params=params)
  42.    if response.status_code != 200:
  43.        result["code"] = response.status_code
  44.        result["message"] = "服务注册Nacos失败,失败原因:{error_message}".format(error_message=response.text)
  45.        return result
  46.    if response.text != 'ok':
  47.        result["code"] = 500
  48.        result["message"] = "服务注册Nacos失败,失败原因:{error_message}".format(error_message=response.text)
  49.        return result
  50.    return result
  51. def service_beat():
  52.    """
  53.   服务心跳,默认是5s一次
  54.   :return:
  55.   nacos的服务心跳接口有以下参数
  56.   serviceName 服务名
  57.   ip       服务实例IP
  58.   port   服务实例PORT
  59.   namespaceId 命名空间ID
  60.   groupName 分组名
  61.   ephemeral 是否临时实例
  62.   beat   实例心跳内容
  63.   """
  64.    # 构造请求参数
  65.    params = {
  66.        "serviceName": "python-service",
  67.        'ip': 'xx.xx.xx.xx',
  68.        'port': 8845
  69.   }
  70.    while True:
  71.        response = requests.put(
  72.            "{NACOS_URL}/{NACOS_HEARTBEATS_URL}".format(NACOS_URL=NACOS_URL, NACOS_HEARTBEATS_URL=NACOS_HEARTBEATS_URL),
  73.            params=params)
  74.        print("已注册服务,执行心跳服务,续期服务响应状态: {status_code}".format(status_code=response.status_code))
  75.        time.sleep(HEARTBEATS_TIME)
  76. def main():
  77.    # 注册服务
  78.    service_register()
  79.    # 服务检测
  80.    service_beat()
  81. if __name__ == '__main__':
  82.    main()

实现效果:

4.参考文档

nacos文档:Open API 指南

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/835575
推荐阅读
相关标签
  

闽ICP备14008679号