【Nacos源码之配置管理 七】增删改配置数据之后如何通知集群中的其他机器

本文深入探讨了Nacos中配置管理的增删改操作,特别是数据变更后的通知流程。从ConfigController.publishConfig方法开始,介绍了如何持久化配置、触发事件通知,以及AsyncNotifyService如何异步地将配置变更广播到集群中的所有服务器。同时,详细阐述了DumpProcessor如何处理数据变更任务,更新本地磁盘文件和缓存,并通知订阅者。文章总结了整个流程,并预告了后续将解答的关于客户端订阅、服务端通知以及连接方式的问题。
摘要由CSDN通过智能技术生成

在后台管理界面可以直接增删改查所有的配置数据,那么问题来了

增删改数据这个操作,除了落库,还做了哪些操作?

新增配置数据


打开后台新建一个配置640?wx_fmt=png

  1. 如果是新增先访问Http请求ConfigController.getConfig()检验dataId,group等等是否已经存在,已经存在提示不让新增

  2. 不存在可以新增,则访问 ConfigController.publishConfig方法发布配置数据;

ConfigController.publishConfig 发布数据

    /**	
     * 增加或更新非聚合数据。	
     *	
     * @throws NacosException	
     */	
    @RequestMapping(method = RequestMethod.POST)	
    @ResponseBody	
    public Boolean publishConfig(HttpServletRequest request, HttpServletResponse response)	
        throws NacosException {	
        //部分省略....	
        if (AggrWhitelist.isAggrDataId(dataId)) {	
            log.warn("[aggr-conflict] {} attemp to publish single data, {}, {}",	
                RequestUtil.getRemoteIp(request), dataId, group);	
            throw new NacosException(NacosException.NO_RIGHT, "dataId:" + dataId + " is aggr");	
        }	
        final Timestamp time = TimeUtils.getCurrentTime();	
        String betaIps = request.getHeader("betaIps");	
        ConfigInfo configInfo = new ConfigInfo(dataId, group, tenant, appName, content);	
        if (StringUtils.isBlank(betaIps)) {	
            if (StringUtils.isBlank(tag)) {	
                persistService.insertOrUpdate(srcIp, srcUser, configInfo, time, configAdvanceInfo, false);	
                EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, dataId, group, tenant, time.getTime()));	
            } else {	
                persistService.insertOrUpdateTag(configInfo, tag, srcIp, srcUser, time, false);	
                EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, dataId, group, tenant, tag, time.getTime()));	
            }	
        } else { // beta publish	
            persistService.insertOrUpdateBeta(configInfo, betaIps, srcIp, srcUser, time, false);	
            EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, time.getTime()));	
        }	
        ConfigTraceService.logPersistenceEvent(dataId, group, tenant, requestIpApp, time.getTime(),	
            LOCAL_IP, ConfigTraceService.PERSISTENCE_EVENT_PUB, content);	
        return true;	
    }
  1. persistService.insertOrUpdate将配置信息持久化到数据库

  2. 发起配置数据有变化事件的通知


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值