Pythonを使用してNacos Configuration Centerを制御する方法を教えます

Pythonを使用してNacos Configuration Centerを制御する方法を教えます

みなさんこんにちは、An Guoです!

Nacos は Alibaba のオープンソース プロジェクトであり、クラウド ネイティブ アプリケーション向けの動的なサービス検出、構成管理、サービス管理プラットフォームの構築に使用されます。

コア機能には、サービス検出、サービスヘルス監視、動的構成サービス、動的DNSサービス、サービスおよびメタデータ管理が含まれます。

Python プロジェクトで Nacos 動的構成サービスを使用する場合はどうすればよいですか?

1. インストールの依存関係

nacos-sdk-python プロジェクトは、Nacos OpenAPI の Python 実装であり、Nacos 構成ファイルのデータの変更を監視するために使用できます。

 # 安装以来pip3 install nacos-sdk-python # Nacos配置文件为yaml的依赖pip3 install pyyaml

プロジェクトアドレス: https://github.com/nacos-group/nacos-sdk-python

2. 基本的な使い方(yaml)

YAML設定ファイルを例に挙げます

まず、Nacos接続情報(接続情報、名前空間、ユーザー名、パスワード)を使用してNacosクライアント接続オブジェクトを作成します。

 import nacos # 连接地址SERVER_ADDRESSES = "192.*.*.*" SERVER_PORT = '8848' # 命名空间NAMESPACE = "public" # 账号信息USERNAME = 'nacos' PASSWORD = 'nacos' # 创建一个连接对象client = nacos.NacosClient(f'{SERVER_ADDRESSES}:{SERVER_PORT}', namespace=NAMESPACE, username=USERNAME, password=PASSWORD

次に、グループ名とサービスIDでサービスの構成を解析し、YAML形式でデータを解析します。

 import yaml # 初始化def init(data_id, group): config = client.get_config(data_id, group) # 配置数据解析(YAML) config_data = yaml.load(config, Loader=yaml.FullLoader) # 通过键路径,解析出数据result = config_data['arg1']['arg2'] print(result) # 服务id(键) data_id = "service_name" # 分组名称,默认为:DEFAULT_GROUP group = "DEFAULT_GROUP" # 初始化解析init(data_id, group)

最後に、グループ名とサービス ID、および Nacos 接続情報を使用してリスナー イベントを追加し、Nacos 構成が変更されたときにプログラムが変更されたデータを適時に取得できるようにします。

 # Nacos数据变动时触发def nacos_data_change_callback(config): # 数据解析nacos_data = yaml.load(config['content'], Loader=yaml.FullLoader) # 读取键值result = nacos_data['arg1']['arg2'] print(result) # 监听Nacos数据变动def add_nacos_listener(data_id, group): client.add_config_watcher(data_id=data_id, group=group, cb=nacos_data_change_callback) # 添加监听事件add_nacos_listener(data_id, group)

3. プロパティファイル

YAML設定ファイルとの違いは

  • YAMLはインデントとコロンを使用して階層を示す
  • プロパティは等号を使用してキーと値のペアを接続します

Nacos 構成ファイルを監視する機能では、解析ロジックを変更するだけで済みます。

 import nacos # 解析Properties配置文件(Nacos) # 初始化def init(data_id, group): # 换行符进行分割,存入列表中config_list = client.get_config(data_id, group).split("\n") properties = {} for config_item in config_list: # 过滤有用的键值对if config_item.find('=') > 0: strs = config_item.replace('\n', '').split('=') properties[strs[0]] = strs[1] # 配置的地址address = properties['address'] print(address) # Nacos数据变动时触发def nacos_data_change_callback(config): config_list = config['content'].split("\n") properties = {} for config_item in config_list: # 过滤有用部分if config_item.find('=') > 0: strs = config_item.replace('\n', '').split('=') properties[strs[0]] = strs[1] # 配置的地址address = properties['address'] print("Nacos数据变动了,address:", address)

4. Python Web + ナコス

Python Web アプリケーションで Nacos の動的構成を組み合わせる場合は、以下の手順に従う必要があります。

ここではFastAPIを例に挙げて説明します

まず、Nacosクライアント接続オブジェクトとグローバル変数を定義します。

PS: グローバル変数はテストデモンストレーションに使用されます

import nacos client = nacos.NacosClient(f'{SERVER_ADDRESSES}:{SERVER_PORT}', namespace=NAMESPACE, username=USERNAME, password=PASSWORD) # 定义一个全局变量arg1 = ''

次に、FastAPIオブジェクトをインスタンス化し、アプリケーションの起動時にasyncioを使用してリスナーイベントを作成します。

 from fastapi import FastAPI import nacos import uvicorn import asyncio app = FastAPI() # 运行时触发@app.on_event("startup") async def startup_event(): asyncio.create_task(event_listener()) if __name__ == '__main__': uvicorn.run("demo_fastapi:app", host="0.0.0.0", port=8000, reload=True)

監視イベントでは、グループ名とサービスIDを使用してデータを初期化および監視します。

 # Nacos初始化async def init(data_id, group): global arg1 # 换行符进行分割,存入列表中config_list = client.get_config(data_id, group).split("\n") ... # 配置的地址arg1 = properties['address'] print("arg1:", arg1) # Nacos数据变动时触发def nacos_data_change_callback(config): global arg1 config_list = config['content'].split("\n") ... # 配置的地址arg1 = properties['address'] print("arg1:", arg1) async def event_listener(): data_id = "service_name" group = "DEFAULT_GROUP" # 初始化await init(data_id, group) # Nacos配置监听,用于数据变动监听client.add_config_watcher(data_id=data_id, group=group, cb=nacos_data_change_callback)

最後に、変数の値を取得するための簡単なインターフェースを定義します。

 # 定义一个全局变量arg1 = '' @app.get("/") async def index(): global arg1 return {"message": arg1}

これにより、Nacos 設定ファイル内のデータが変更された場合、インターフェースを通じて最新のデータをリアルタイムで取得できるようになります。

5. 落とし穴を防ぐ

nacos-sdk-python プロジェクトで説明されているように、作者はせいぜい Python 3.7 および Nacos 1.3.2 との互換性しか実現しませんでした。

実際のテストでは、プログラムはWindowsでは正常に動作しましたが、MacまたはLinuxに配置すると、TypeError:'_thread.RLock'オブジェクトをピクルできませんというエラーが発生していることがわかりました。

ここでは、ソースコード nacos/clinet.py を書き直して Windows 以外のシステムと互換性を持たせ、RLock を使用して実装する必要があります。

PS: 記事の最後にあるキーワードを送信してソースコードを取得し、直接置き換えることができます。

詳細は次号をご覧ください

https://github.com/nacos-group/nacos-sdk-python/pull/125

<<:  Kubernetesプラットフォーム環境を素早く構築する方法

>>:  量子コンピューティングについて知っておくべき12のこと

推薦する

TragicServers - 5.94 USD/年/128 MB RAM/10 GB HDD/500 GB トラフィック/ロサンゼルス

今日は「悲劇的な」VPS ベンダーについてお話ししたいと思います。彼らが提供する VPS は悲劇では...

クラウドネイティブを語る上で「コンテナ化」は避けて通れない

[[381346]]この記事はWeChatの公開アカウント「Full-Stack Coder Por...

5G時代、クラウドエッジ連携が急速に発展し、九洲クラウドはハイブリッドクラウドを包括的に展開

[51CTO.comからのオリジナル記事] 5Gの登場により、モノのインターネット、自動運転車、AR...

操作上の注意: クモがどのように這うのかを理解しましょう。インクルージョンの謎を解明する

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO を行う際、多くの...

製品価値とユーザーエクスペリエンス:どちらが重要か?どちらも欠かせない

[編集者注] この記事は、@SamaelRen Shuai の個人ブログに掲載されました。製品価値と...

RegVPS-$7/Windows/512 メモリ/15g ハードドライブ/1T トラフィック/ロシア/スイス/ドイツ/米国

RegVPSはロシア(2009年)に登録された会社です。現在、ロシア、スイス、ドイツ、米国の4つのデ...

WebSound - $34/年/kvm/256m メモリ/10gSSD/2T トラフィック/ロサンゼルス

WebSound.co.uk という会社は英国に登録されています。本当に英国人によって開設されたかど...

Byte インタビュー: MQ メッセージ バックログ問題を解決するには?

MQ (メッセージ キュー) メッセージ バックログ問題とは、未処理のメッセージが大量にメッセージ ...

Baidu K-stationの理由:Taobaoアフィリエイトステーション分析

みなさんこんにちは。ブロガーの Deng Kanhao です。今日はこの記事を皆さんと共有できてとて...

分散システムの知識共有: CAP定理の正しい理解

序文私は CAP に関する同僚の本やブログをたくさん読んできました。基本的に、人によって理解は異なり...

キーワード検索結果から

まずは写真を見せましょう。この写真は百度で流量計を検索した結果のホームページです。このような結果を見...

SEO マーケティング手法とは何ですか?

諺にもあるように、「良いワインでも、よく知られていなければ隠しておく必要がある」のです。インターネッ...

SITEウェブサイトのホームページが1位ではない理由の分析

Baidu は最近非常に熱心に取り組んでおり、頻繁に更新しています。そのため、ウェブマスターとして、...