Files
AiDA_Python/app/core/nacos_config.py

109 lines
3.5 KiB
Python
Raw Normal View History

2026-05-29 15:35:03 +08:00
import logging
import yaml
import nacos
from app.core.config import settings
logger = logging.getLogger("nacos")
# client config
NACOS_SERVER_ADDRESSES = "18.167.251.121:28848"
NACOS_NAMESPACE = "zcr"
NACOS_USERNAME = "nacos"
NACOS_PASSWORD = "Aidlab123123!"
# nacos config info
NACOS_CONFIG_GROUP = "LOCAL"
NACOS_CONFIG_DATA_ID = "aida.python"
# nacos server config
NACOS_SERVICE_NAME = "AiDA-DEV" # ←←← 必须修改!建议格式:项目名-环境,例如 ai-image-service-dev
NACOS_SERVICE_IP = "127.0.0.1"
NACOS_SERVICE_PORT = 8445
# nacos client
client = nacos.NacosClient(
server_addresses=NACOS_SERVER_ADDRESSES,
namespace=NACOS_NAMESPACE,
username=NACOS_USERNAME,
password=NACOS_PASSWORD
)
def listener_config_callback(args):
data_id = args['data_id']
namespace = args['namespace']
group = args['group']
content = args['content']
logger.info("【Nacos】配置")
try:
logger.info(f"【Nacos】 动态更新 : data_id : {data_id} | namespace : {namespace} | group_name: {group}")
new_config = yaml.safe_load(content) if content else {}
for key, value in new_config.items():
if hasattr(settings, key):
old_val = getattr(settings, key)
setattr(settings, key, value)
if old_val != value:
logger.info(f"🔄 配置更新 → {key}: {old_val}{value}")
except Exception as e:
logger.error(f"【Nacos】 配置解析失败: {e}")
def remove_config_callback(args):
data_id = args['data_id']
namespace = args['namespace']
print(f" remove_config_callback : {data_id} | namespace : {namespace}")
def load_nacos_config():
"""初始化 Nacos 配置并监听变化"""
logger.info(f"【Nacos】 配置订阅 - 初次获取配置信息")
try:
# 1. 第一次获取配置
content = client.get_config(data_id=NACOS_CONFIG_DATA_ID, group=NACOS_CONFIG_GROUP)
if content:
loaded = yaml.safe_load(content) or {}
for key, value in loaded.items():
if hasattr(settings, key):
setattr(settings, key, value)
logger.info(f"【Nacos】✅ 配置加载成功: {NACOS_CONFIG_DATA_ID} | 覆盖字段数量: {len(loaded)}")
else:
logger.warning("【Nacos】 返回配置为空,使用 .env + 默认值")
client.add_config_watcher(data_id=NACOS_CONFIG_DATA_ID, group=NACOS_CONFIG_GROUP, cb=listener_config_callback)
logger.info("【Nacos】✅ 配置监听器已注册(支持热更新)")
except Exception as e:
logger.error(f"【Nacos】❌ 初始化失败: {e},将仅使用 .env 配置")
finally:
client.remove_config_watcher(
data_id=NACOS_CONFIG_DATA_ID,
group=NACOS_CONFIG_GROUP,
cb=remove_config_callback
)
def register_server():
logger.info(f"nacos 服务注册")
try:
client.add_naming_instance(
service_name=NACOS_SERVICE_NAME,
ip=NACOS_SERVICE_IP,
port=NACOS_SERVICE_PORT,
metadata={"status": "ok"},
)
except Exception as e:
logger.warning(f"【Nacos】❌ 服务注册失败 : {e}")
def deregister_server():
logger.info(f"nacos 服务注册")
try:
client.remove_naming_instance(
service_name=NACOS_SERVICE_NAME,
ip=NACOS_SERVICE_IP,
port=NACOS_SERVICE_PORT
)
except Exception as e:
logger.warning(f"【Nacos】❌ 服务注销失败 : {e}")