【Python】Python注册微服务到nacos

news2024/11/26 4:54:42

Python注册微服务到Nacos

1.Nacos部署

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

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

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

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

    # nacos/conf/application.properties
    # 默认的web路由
    server.servlet.contextPath=/nacos
    # web服务端口
    server.port=8848
    # 数据库配置
    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
    db.user.0=nacos
    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服务的注册,实现代码如下:

import time
import requests
​
# 心跳时间
HEARTBEATS_TIME = 5
# Nacos地址
NACOS_URL = 'http://xx.xx.xx.xx:8848/nacos'
# 服务注册路由
NACOR_REGISTER_URL = 'v1/ns/instance'
# 心跳检测路由
NACOS_HEARTBEATS_URL = 'v1/ns/instance/beat'
​
​
# Nacos服务注册
def service_register():
    """
    Nacos服务注册的接口有以下参数:
    ip          服务实例IP
    port        服务实例port
    namespaceId 命名空间ID
    weight      权重
    enabled     是否上线
    healthy     是否健康
    metadata    扩展信息
    clusterName 集群名
    serviceName 服务名
    groupName   分组名
    ephemeral   是否临时实例
    :return:
    """
    # 返回参数
    result = {
        "code": 200,
        "message": "success"
    }
    # 构造请求参数
    params = {
        'serviceName': 'python-service',
        'ip': 'xx.xx.xx.xx',
        'port': 8845
    }
    response = requests.post(
        "{NACOS_URL}/{NACOR_REGISTER_URL}".format(NACOS_URL=NACOS_URL, NACOR_REGISTER_URL=NACOR_REGISTER_URL),
        params=params)
    if response.status_code != 200:
        result["code"] = response.status_code
        result["message"] = "服务注册Nacos失败,失败原因:{error_message}".format(error_message=response.text)
        return result
    if response.text != 'ok':
        result["code"] = 500
        result["message"] = "服务注册Nacos失败,失败原因:{error_message}".format(error_message=response.text)
        return result
    return result
​
​
def service_beat():
    """
    服务心跳,默认是5s一次
    :return:
    nacos的服务心跳接口有以下参数
    serviceName 服务名
    ip          服务实例IP
    port        服务实例PORT
    namespaceId 命名空间ID
    groupName   分组名
    ephemeral   是否临时实例
    beat        实例心跳内容
    """
    # 构造请求参数
    params = {
        "serviceName": "python-service",
        'ip': 'xx.xx.xx.xx',
        'port': 8845
    }
    while True:
        response = requests.put(
            "{NACOS_URL}/{NACOS_HEARTBEATS_URL}".format(NACOS_URL=NACOS_URL, NACOS_HEARTBEATS_URL=NACOS_HEARTBEATS_URL),
            params=params)
        print("已注册服务,执行心跳服务,续期服务响应状态: {status_code}".format(status_code=response.status_code))
        time.sleep(HEARTBEATS_TIME)
​
def main():
    # 注册服务
    service_register()
    # 服务检测
    service_beat()
​
​
if __name__ == '__main__':
    main()

实现效果:

4.参考文档

nacos文档:Open API 指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud-MQ消息队列

一、消息队列介绍 MQ (MessageQueue) ,中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。消息队列是一种基于生产者-消费者模型的通信方式,通过在消息队列中存放和传递消息,实现了不同组件、服务或系统…

微信小程序触屏事件_上划下划事件

一、微信小程序触屏事件 bindtouchstart:手指触摸动作开始 bindtouchmove:手指触摸后移动 bindend:手指触摸动作结束 属性类型说明touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组 Touch 对象 属性类型说明identi…

【数据结构和算法初阶(C语言)】顺序表+单链表经典例题图文详解(题解大合集,搭配图文演示详解,一次吃饱吃好)

目录 1.移除链表元素 1.1思路1:遍历删除 1. 2 思路2:尾插法 2.反转链表 3.链表的中间节点 3.1解题思想及过程 3.2快慢指针思想解题---变式:返回链表的倒数第K个节点 4.合并两个有序链表 4.1解题思想 1取小的尾插 5.反转链表 6…

【工作经验分享】,金三银四大厂面经总结

面试题 一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。 一 JAVA相关 1)JAVA基础 1.java基本数据类型有哪些,int, long占几个字节 2. 和 equals有什…

Maven【5】在IDEA环境中配置和使用Maven

【1】创建父工程 1.创建 Project 按照idea工程的布局,project相当于父工程,里面的module相当于子工程(模块工程) 我们先来创建最外层这个父工程:

vue在线查看pdf文件

1.引入组件 npm install --save vue-pdf2、pdf组件页面模板 <template><div class"scrollBox" ><el-dialog :visible.sync"open" :top"1" width"50%" append-to-body><div slot"title"><el…

【强化学习的数学原理-赵世钰】课程笔记(七)时序差分方法

一.内容概述 第五节课蒙特卡洛&#xff08;Mento Carlo&#xff09;方法是全课程中第一次介绍 model-free 的方法&#xff0c;本节课的 Temporal-difference learning&#xff08;TD learning&#xff09;是我们要介绍的第二种 model-free 的方法。基于蒙特卡洛&#xff08;Me…

清澈喷嚏,宝宝舒爽轻松:新生儿打喷嚏的温馨指南

引言 新生儿的喷嚏声&#xff0c;如同小鸟啁啾&#xff0c;是宝宝在探索世界时展示的自然表现。尽管这种可爱的行为可能会让家长产生担忧&#xff0c;但实际上&#xff0c;喷嚏是宝宝健康成长的正常体征之一。在这篇文章中&#xff0c;我们将分享一些关于新生儿打喷嚏的注意事…

答题pk小程序源码技术大解析

答题pk小程序源码解析 在数字化时代&#xff0c;小程序因其便捷性、即用性而受到广泛欢迎。其中&#xff0c;答题pk小程序更是成为了一种寓教于乐的现象。它不仅为用户提供了趣味性的知识竞技平台&#xff0c;还为企业、教育机构等提供了互动营销和知识传播的新途径。本文将对…

Minio容器化部署并整合SpringBoot

1、启动minio容器 docker run -p 9000:9000 -p 9090:9090 --name minio -d --restartalways -e MINIO_ACCESS_KEYminio -e MINIO_SECRET_KEYminio -v /usr/local/minio/data:/data -v /usr/local/minio/config:/root/.minio minio/minio server /data --console-addr…

HTML入门:05HTML多媒体

HTML入门&#xff1a;05HTML多媒体 1 video标签1.1 控制按钮&#xff1a;controls1.2 宽度和高度&#xff1a;width和heightt1.3 预载&#xff1a;preload1.4 静音&#xff1a;muted1.5 自动播放&#xff1a;autoplay1.6 无限循环&#xff1a;loop1.7 poster 2 audio标签 在早期…

二百二十七、Linux——通过shell脚本判断HDFS文件是否存在,如果存在则删除HDFS文件

一、目的 在用脚本去实现对HDFS中过期的ODS层原始数据进行删除后&#xff0c;发现还需要在脚本中对HDFS文件是否存在进行判断&#xff0c;否则如果HDFS文件不存在那么任务执行就会报错 报错原因是这一天的HDFS文件并不存在 原有脚本 #! /bin/bash source /etc/profile nowda…

【bug日记】已解决:Invalid bound statement (not found): 找不到对应的Mapper映射类

急着解决问题的哥们直接用目录跳到下文哈 我放传送门了 目录 试错 尝试过确认的东西&#xff1a; 最终解决方案&#xff01;已经完美解决&#xff1a; 只需要在你配置数据源的地方&#xff1a; 更改为&#xff1a; MybatisSqlSessionFactoryBean sessionFactory …

AcWing 1024. 装箱问题

解题思路 相关代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner new Scanner(System.in);int v scanner.nextInt();int n scanner.nextInt();int a[] new int[n1];for(int i1;i<n;i) a[i]scanner.nextInt();…

【金九银十】,架构师花费近一年时间整理出来的安卓核心知识

面试经历 主要是根据回忆总结的&#xff08;会有遗漏点&#xff09;。 1. 腾讯&#xff08;QQ音乐&#xff09; 腾讯面试涉及到的范围也很广&#xff0c;甚至问到了C、Kotlin Flutter &#xff0c;也具有一定挑战性的&#xff0c;以下包括腾讯腾讯安卓客户端三面&#xff0c…

k8s-控制器

概述 控制器是什么 控制器是 k8s 内置的管理工具。可以帮助用户实现 Pod 的自动部署、自维护、扩容、滚动更新等功能的自动化程序 为什么要使用控制器 有大量 Pod 需要维护管理需要维护 Pod 的健康状态控制器可以像机器人一样可以替用户完成维护管理的工作 Deployment 控制…

2.14ALU,存储系统

IR存放当下欲执行的指令&#xff1b;PC存放下一条指令的地址&#xff1b; MAR存放欲访问的存储单元地址&#xff1b;MDR存放从存储单元取来的数据&#xff01; 地址译码器是主存的构成部分&#xff0c;不属于CPU&#xff1b;地址寄存器虽然一般属于主存&#xff0c;但是现代计…

如何从 WordPress 中的静态资源中删除查询字符串

今天有一个客户来问询&#xff0c;hostease主机创建的WordPress站点&#xff0c;在GTMetrix或Pingdom进行网站速度测试&#xff0c;看到有关查询字符串的警告。如果不想看到查询字符串的警告&#xff0c;要如何处理呢?我们测试&#xff0c;可以通过一些处理满足这个需求。我们…

瑞数4.0某房地产_瑞数补环境

文章目录 前言目标网站瑞数简介整体流程1.找到cookie的生成位置2.网站分析逆向流程分析补环境 结果结语 前言 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果…