nacos配置中心使用记录

nacos是一个分布式配置中心,可用它做配置管理、服务发现等,目前用到它的是配置中心的功能

在日常的web开发中常常会用到一些配置,如数据库连接地址、端口、账号、密码,jwt密钥等配置,如果是直接写在config配置文件中的话,等项目启动后再想变更配置参数会很麻烦,而且如果服务多的话修改起来也麻烦,所有需要一个配置中心记录配置信息,各个服务都从配置中心中拉取配置参数,后端服务做个长轮训监听配置中心的配置消息,如果有变动则更新服务中的配置

nacos安装启动

选用docker安装nacos

docker pull nacos/nacos-server

# MODE=standalone 参数表明是单机运行,nacos可以集群部署
# nacos是java写的,如果服务器内存小的话需要配置jvm参数
 
docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e 
JVM_XMN=256m -p 8848:8848 -d nacos/nacos-server:latest   

启动后默认账号密码都是nacos
在这里插入图片描述

nacos使用配置

新建命名空间,命名空间相当于服务的配置,一个服务下可以有多个配置
在这里插入图片描述
新增配置
在这里插入图片描述
在这里插入图片描述
新增或修改完配置后点击发布将配置添加或修改到配置中心里

后端获取nacos配置
import hashlib

import aiohttp


# 配置参数区
NacosConfig = {
    "dataid": "cook_info_srv",    # 配置的dataid
    "group": "cook_info",         # 配置的分组
    "host": "http://192.168.146.140",
    "port": 8848,
    "namespaceid": "600e3596-7f1f-4f73-8e7a-3a035df7dedd",   # 配置命名空间id
    "md5": ""  # 用来保存服务配置的md5值,在监听过程中就是使用md5的值来判断nacos中的配置数据是否有修改
}
WxConfig = dict()
JWT_ENCRYPT_KEY = ""


# 监听nacos配置
async def listener_config_update():
    listenerConfigUrl = "{}:{}/nacos/v1/cs/configs/listener".format(NacosConfig["host"], NacosConfig["port"])
    # http长链接,nacos会保存请求30秒,在30秒内如果有变动就返回
    header = {"Long-Pulling-Timeout": "30000"}
    while True:
        session = aiohttp.ClientSession()
        try:
            # 监听配置参数,
            data = {"Listening-Configs": NacosConfig["dataid"] + "\002" + NacosConfig["group"]
                                         + "\002" + NacosConfig["md5"] + "\002" + NacosConfig["namespaceid"] + "\001"}
            re = await session.post(listenerConfigUrl, data=data, headers=header)
            ret = await re.text()
            # 如果配置文件有变动,则更新配置文件
            if ret:
                await init_env(session)
        except Exception as e:
            print("监听配置文件出现错误: ", e)
        finally:
            await session.close()


# 获取nacos配置
async def get_config(session: aiohttp.ClientSession):
    # 获取nacos配置url
    getConfigUrl = "{}:{}/nacos/v1/cs/configs".format(NacosConfig["host"], NacosConfig["port"])
    params = {
        "dataId": NacosConfig["dataid"],
        "group": NacosConfig["group"],
        "tenant": NacosConfig["namespaceid"]
    }

    re = await session.get(getConfigUrl, params=params)
    ret = await re.text()
    md5 = hashlib.md5()
    md5.update(ret.encode())
    # 获取配置md5
    NacosConfig["md5"] = md5.hexdigest()
    config = await re.json()
    return config


# 初始化配置
async def init_env(session: aiohttp.ClientSession):

    # 获取nacos配置json
    config = await get_config(session)
	
	# 初始化数据库连接
    # if config["database"] != Database:
    #     await init_databases(config["database"])
    #     Database = config["database"]
	
    if config.get("WxConfig") != WxConfig:
        WxConfig = config.get("WxConfig")

    JWT_ENCRYPT_KEY = config.get("JWTConfig").get("JWT_ENCRYPT_KEY")

在web服务器启动的时候从nacos中获取配置参数动态初始化项目配置, 初始化完成后监听nacos配置,如果监听发现nacos中配置有变动,那么就调用初始化方法重新初始化变动的部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值