cat client的入口点是com.dianping.cat.Cat类,该类是单实例的,
private static Cat s_instance = new Cat();
当第一次调用com.dianping.cat.Cat.getManager()或者com.dianping.cat.Cat.getProducer()时会执行com.dianping.cat.Cat.checkAndInitialize()方法进行初始化
CAT使用了一个类似于spring container的plexus容器来执行依赖管理。它扫描classpath下各个jar中META-INF/plexus目录下所有的xml文件,将定义的组件加入组件管理器。
关键的初始化代码在
com.dianping.cat.CatClientModule.execute 方法中完成的,主要逻辑如下
Cat.getInstance().setContainer(((DefaultModuleContext) ctx).getContainer());
StatusUpdateTask statusUpdateTask = ctx.lookup(StatusUpdateTask.class);
Threads.forGroup("cat").start(statusUpdateTask);
Cat.setContainer初始化MessageManager和MessageProducer实例,MessageManager主要用于消息的发送,MessageManager的m_transportManager属性实现类为DefaultTransportManager, DefaultTransportManager初始化时会初始化TcpSocketSender, TcpSocketSender.initialize()方法中,有如下代码
Threads.forGroup("cat").start(this);
Threads.forGroup("cat").start(m_manager);
Threads.forGroup("cat").start(new MergeAtomicTask());
分别初始化了一个消息发送线程,网络连接状态监护线程,以及一个消息合并线程
MessageProducer用于消息的的产生,
statusUpdateTask任务用于被监控服务器的健康状态采集
在com.dianping.cat.configuration.DefaultClientConfigManager类中完成配置文件的解析(client.xml, app.properties)
Posted in: CAT
Comments are closed.