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

背景

shigen之前遇到了一个服务,需求结合nacos Spring security完结服务的负载均衡。其间最为重要的便是python服务自己注册到nacos上,趁着空闲时刻,来研讨了一番。

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

python flask怎么注册到nacos

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

python flask怎么注册到nacos

看着如同也没说的很清楚,我们自己来调用SDK完结一下。

代码完结

首要确保nacos服务发动了,shigen这儿用的docker-compose的方法发动的:

python flask怎么注册到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

python flask怎么注册到nacos

依靠安装完结,就能够继续写代码了,主要是注册上服务和发送心跳。

最开端,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

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

操控台操作一下:

python flask怎么注册到nacos

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

最后完结的作用是这样的:

python flask怎么注册到nacos

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

与shigen一起,每天不一样!