Python项目如何读取nacos配置

目录

一、nacos配置示例

二、python读取nacos配置


一、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("===== 配置加载流程完成 =====")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tizzy JJ

赞助一次「咖啡续命」费用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值