python flask服务如何注册到nacos

简介: 一文讲清楚python flask服务如何注册到nacos

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
个人IP:shigen

背景

shigen之前遇到了一个服务,需要结合nacos+ Spring security实现服务的负载均衡。其中最为重要的就是python服务自己注册到nacos上,趁着闲暇时间,来研究了一番。

nacos官网中提到了【其它语言的sdk】:

nacos其它语言SDK

点击【python】就跳转到了GitHub。

官网内容

看着好像也没说的很清楚,我们自己来调用SDK实现一下。

代码实现

首先确保nacos服务启动了,shigen这里用的docker-compose的方式启动的:

nacos启动

对应的docker-compose文件如下:

version: '3'
services:
  nacos-standalone:
    image: nacos/nacos-server:v2.1.2-slim
    container_name: nacos-server
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
    environment:
      - 'MODE=standalone'
      - 'TIME_ZONE=Asia/Shanghai'
    volumes:
      - ./conf:/home/nacos/conf
      - ./logs:/home/nacos/logs
      - ./data:/home/nacos/data

代码可以参考shigen的gitee-cloud-patform

首先下载依赖:

pip install nacos-sdk-python

安装依赖

依赖安装完成,就可以继续写代码了,主要是注册上服务和发送心跳。

最开始,shigen尝试了官方的SDK,总是出现异常,最后看了一下官方的描述:

Supported Python version:

Python 2.7 Python 3.6 Python 3.7

Supported Nacos version

Nacos 0.8.0 ~ 1.3.2

好家伙,我忽视了nacos的版本,注意,我的nacos是这样的:nacos/nacos-server:v2.1.2-slim,直接2.0+,不适配。害得我折腾了一下午,最后和伙伴出去跑步了,心里一想,我真是钻牛角尖。服务的注册也不是我的首要任务,实在不行,用官方的API照样可以注册上去。

于是,回来尝试了一下:

import sys
# 用于异步处理心跳检测
import threading
import time
from typing import NoReturn

import requests
from flask import Flask, jsonify, request

app = Flask(__name__)


# 服务注册
def service_register(service_name: str, ip: str, port: int):
    url = f"http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName={service_name}&ip={ip}&port={port}"
    res = requests.post(url)
    print(f"完成注册: {res.status_code}")


# 心跳检测
def service_beat(service_name: str, ip: str, port: int) -> NoReturn:
    while True:
        url = f"http://127.0.0.1:8848/nacos/v1/ns/instance/beat?serviceName={service_name}&ip={ip}&port={port}"
        res = requests.put(url)
        print(f"心跳检测中... 响应状态码: {res.status_code}")
        time.sleep(5)


@app.route('/get_server_info', methods=['GET'])
def get_server_info():
    server_ip = request.host.split(':')[0]
    server_port = request.host.split(':')[1]

    response = {
   
   'ip': server_ip, 'port': server_port}
    return jsonify(response)


if __name__ == '__main__':
    if len(sys.argv) > 1:
        port = int(sys.argv[1])
    else:
        port = 10000
    service_name = 'python-server'
    ip = '127.0.0.1'
    service_register(service_name, ip, port)
    # 5 秒后执行心跳检测
    threading.Timer(5, service_beat(service_name, ip, port)).start()
    app.run()

参考文章:spring boot和flask整合nacos

特意的留了一个命令行参数作为服务的端口号,这样的话,副本数就很好控制了。

控制台操作一下:

服务的启动

注意:服务在第一次启动注册之后,需要不断的对nacos发送心跳,表明服务的存活。

最后实现的效果是这样的:

实现效果

那接下来就是网关层的调用和负载均衡了,这个下期再讲。

与shigen一起,每天不一样!

目录
相关文章
|
3天前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
36 18
|
1天前
|
JSON 测试技术 数据库
Python的Flask框架
Python的Flask框架
|
6天前
|
JSON API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
13 6
|
6天前
|
Python
使用Python和Flask构建简单的Web应用
使用Python和Flask构建简单的Web应用
18 6
|
14天前
|
JSON 测试技术 数据库
Python的Flask框架
Python的Flask框架
|
25天前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
25天前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
19天前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
44 0
|
19天前
|
JSON API 数据库
探索FastAPI:不仅仅是一个Python Web框架,更是助力开发者高效构建现代化RESTful API服务的神器——从环境搭建到CRUD应用实战全面解析
【8月更文挑战第31天】FastAPI 是一个基于 Python 3.6+ 类型提示标准的现代 Web 框架,以其高性能、易用性和现代化设计而备受青睐。本文通过示例介绍了 FastAPI 的优势及其在构建高效 Web 应用中的强大功能。首先,通过安装 FastAPI 和 Uvicorn 并创建简单的“Hello, World!”应用入门;接着展示了如何处理路径参数和查询参数,并利用类型提示进行数据验证和转换。
32 0
|
21天前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
20 0