目录
一、nacos配置示例
在Nacos中创建yaml格式配置(Data ID: your-data-id
)
# Nacos配置文件 (your-data-id.yaml)
app:
env: production
version: 1.2.3
apis:
deepseek:
api_key: "sk-your-deepseek-key-here"
timeout: 30
database:
host: "db.prod.example.com"
port: 3306
user: "appuser"
password: "secure_password_123"
DEEPSEEK_API_KEY: "sk-xxx-123"
二、python读取nacos配置
- 新建一个python文件,命令为cos.py
- 源代码如下:
from nacos import NacosClient
import os
import yaml
import logging
import sys
# =========== 日志配置 ===========
# 创建日志记录器
logger = logging.getLogger("nacos_config")
logger.setLevel(logging.INFO) # 只显示INFO及以上级别信息
# 创建控制台处理器
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.INFO) # 只显示INFO及以上级别消息
# 创建简单的格式化器
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
# 添加处理器到日志记录器
logger.addHandler(console_handler)
# =====================================
# Nacos服务器配置 (这些参数可放入环境变量或配置文件中)
NACOS_CONFIG = {
'host': 'nacos-xxx.com',
'port': 8848,
'namespace': 'dev1',
'group': 'test',
'data_id': 'aicase',
'username': 'admin',
'password': 'Qxpv1xxxgv'
}
logger.info("===== 开始加载Nacos配置 =====")
try:
logger.info(f"正在连接Nacos服务器: {NACOS_CONFIG['host']}:{NACOS_CONFIG['port']}")
logger.info(
f"命名空间: {NACOS_CONFIG['namespace']}, 分组: {NACOS_CONFIG['group']}, Data ID: {NACOS_CONFIG['data_id']}")
# 创建Nacos客户端
client = NacosClient(
f"{NACOS_CONFIG['host']}:{NACOS_CONFIG['port']}",
namespace=NACOS_CONFIG['namespace'],
username=NACOS_CONFIG['username'],
password=NACOS_CONFIG['password']
)
# 获取配置
config_str = client.get_config(
NACOS_CONFIG['data_id'],
NACOS_CONFIG['group']
)
# 检查配置是否为空
if not config_str or config_str.strip() == "":
logger.error("从Nacos接收的配置为空")
raise ValueError("Nacos配置内容为空")
logger.info(f"获取的配置内容长度: {len(config_str)} 字符")
# 解析YAML配置
config_data = yaml.safe_load(config_str)
if not config_data:
logger.error("解析后的配置为空")
raise ValueError("解析后的配置为空")
logger.info(f"成功加载配置,包含 {len(config_data)} 个配置项")
# 将配置注入环境变量
for key, value in config_data.items():
str_value = str(value)
os.environ[key] = str_value
logger.info(f"设置环境变量: {key} = {str_value}")
logger.info(f"成功注入 {len(config_data)} 个环境变量")
except yaml.YAMLError as e:
logger.error(f"YAML解析错误: {str(e)}")
# 这里可以添加回退到本地配置的逻辑
raise
except Exception as e:
logger.error(f"Nacos配置加载失败: {str(e)}")
raise
# ========= 配置检查 =========
logger.info("===== Nacos配置加载完成 =====")
# 列出所有环境变量(可选,可能输出很多)
# logger.info(f"当前环境变量数量: {len(os.environ)}")
# 检查特定的环境变量,即获取到DEEPSEEK_API_KEY供其他模块使用
ds_api_key = os.getenv("DEEPSEEK_API_KEY")
logger.info(f"DEEPSEEK_API_KEY: {ds_api_key if ds_api_key else '未设置'}")
if not ds_api_key:
logger.error("注意: DEEPSEEK_API_KEY配置项未设置!")
else:
logger.info(f"DEEPSEEK_API_KEY值长度: {len(ds_api_key)} 字符")
# 如果值很短,直接显示全部;如果很长,显示首尾部分
if len(ds_api_key) <= 500:
logger.info(f"DEEPSEEK_API_KEY值: {ds_api_key}")
else:
logger.info(f"DEEPSEEK_API_KEY值: {ds_api_key[:20]}...{ds_api_key[-20:]}")
logger.info("===== 配置加载流程完成 =====")