111
This commit is contained in:
108
app/core/nacos_config.py
Normal file
108
app/core/nacos_config.py
Normal file
@@ -0,0 +1,108 @@
|
||||
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}")
|
||||
Reference in New Issue
Block a user