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}")