Nacos配置中心设计分析-客户端


Nacos配置中心按照NameSpace、Group、DataId三级结构来组织配置文件,其中,NameSpace可以用于区分环境,例如dev、test等;Group是服务分组,可以用于标识应用;DataId是配置文件名。在实际应用中,可以将NameSpace和Group与应用绑定,固定写入应用的启动参数。

主要功能

Nacos配置中心客户端主要具有如下能力

  1. 获取配置文件内容
  2. 发布配置文件内容
  3. 添加配置文件监听
  4. 删除配置文件监听

客户端初始化

  • 初始化HTTP代理MetricsHttpAgent:对HttpAgent的进一步封装,增加了统计响应时间的能力,HttpAgent中维护了服务器列表,并启动一个线程不断向服务器发起登录请求,保证客户端的合法性。此外,如果没有指定服务器列表,还会启动一个线程不断查询服务器列表,如果服务器有变动,则发布服务器变更事件,并在本线程调用相应的监听器
  • 创建客户端工作线程ClientWorker:定时检查是否添加了需要监控的配置文件,如果有,则把这个文件更新的监控任务分配给拉取线程,不断从服务端拉取最新文件内容,如果发现文件变更,则更新客户端配置文件内容,并调用相应的监听器(如果有指定的线程池则使用该线程池,没有指定则用自身线程执行监听器调用)

初始化代码如下

    // NacosConfigService
    public NacosConfigService(Properties properties) throws NacosException {
   
        String encodeTmp = properties.getProperty(PropertyKeyConst.ENCODE);
        if (StringUtils.isBlank(encodeTmp)) {
   
            encode = Constants.ENCODE;
        } else {
   
            encode = encodeTmp.trim();
        }
        initNamespace(properties);
        // 初始化HTTP代理MetricsHttpAgent
        agent = new MetricsHttpAgent(new ServerHttpAgent(properties));
        agent.start();
        // 创建客户端工作线程ClientWorker
        worker = new ClientWorker(agent, configFilterChainManager, properties);
    }

重要数据结构

NacosConfigService

// NacosConfigService
public class NacosConfigService implements ConfigService {
   
    ......
    // http代理MetricsHttpAgent
    private HttpAgent agent; 
    // 客户端工作线程
    private ClientWorker worker;
    ......
}

EventDispatcher

public class EventDispatcher {
   
    ......
    // key是事件类型,value是监听器列表
    static final Map<Class<? extends AbstractEvent>, CopyOnWriteArrayList<AbstractEventListener>> LISTENER_MAP
        = new HashMap<Class<? extends AbstractEvent>, CopyOnWriteArrayList<AbstractEventListener>>();
    ......
}

ServerListManager

// ServerListManager 
public class ServerListManager {
   
    ......
    // 服务列表(拼接成一行)
    private String serverAddrsStr;
    // 服务器列表(分解serverAddrsStr得到)
    volatile List<String> serverUrls = new ArrayList<String>();
    // 服务端点地址(查询服务列表请求地址)
    public String addressServerUrl;
    ....
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值