`

Katta源码分析

 
阅读更多

看源码,老实说我没什么很好的方法。所以,只能静下心来看,一步一步的看。 

 

我认为每个程序都有个门,要想进入,首先得把这个门找到,而我找到的katta的门是Katta.java 

 

Katta.java中有个main方法,接收你输入的命令(String[] args) 

1.startNode 

2.startMaster 

3.version 

4.zk 

5.search 

6.addIndex 

7.removeIndex 

8.mergeIndexes 

9.listIndexes 

10.listNodes 

11.showStructure 

12.check 

13.listErrors 

14.redeployIndex 

 

如果想要知道有多少个节点已经连接了,那么输入listIndexes 

main方法先判断是否有值输入,如果没有调用printUsageAndExit(),给出输入的格式并退出程序。 

现在当然是有输入咯,然后就是要Katta显示所有节点了,它调用Katta的构造函数 

katta = new Katta(); 

 

Katta的构造函数,它调用了ZkConfiguration ,ZKClient的构造函数。 

public Katta() throws KattaException { 

final ZkConfiguration configuration = new ZkConfiguration(); 

_zkClient = new ZKClient(configuration); 

_zkClient.start(10000); 

 

ZkConfiguration 它继承了KattaConfiguration类,KattaConfiguration类是一个配置类,它读取katta.zk.properties 

 

文件,生成Properties,方便下一步的读取操作。 

ZKClient它实现了Zookeeper的Watcher,Watcher是一个事件处理程序的接口。 

 

_zkClient = new ZKClient(configuration); 

在ZKClient的构造函数中,把configuration作为参数传了进去,然后读取katta.zk.properties这个文件的 

 

zookeeper.servers,zookeeper.timeout和zookeeper.clientPort 

_zkClient.start(10000); 

打开一个Zookeeper的客户端,并等待Zookeeper服务器的连接。 

使用同步的机制, getEventLock().lock(); 

 

调用ZooKeeper的构造函数: 

ZooKeeper  _zk = new ZooKeeper(_servers, _timeOut, this); 

把从katta.zk.properties这个文件中读取的服务器名,超时时间和Zookeeper它本身作为参数传入这个构造函数。 

 

在Zookeeper的构造函数中又调用了ClientCnxn  的构造函数 

ClientCnxn  cnxn = new ClientCnxn(host, sessionTimeout, this); 

ClientCnxn  为客户端管理socket的i/o,并保持一份可用的服务器连接。 

 

在ClientCnxn的构造函数中调用了两个线程,SendThread和EventThread 

SendThread  这个类服务那些即将离任的请求队列。 

EventThread  这个类服务于返回的信息事件。 

 

当ZooKeeper的状态为CONNECTED时说明已经连接。 

 

katta实例调用它的listNodes()方法以显示节点 

在listNodes()方法中,调用ZKClient的getKnownNodes()方法,返回一个List对象。 

NodeMetaData nodeMetaData = new NodeMetaData(); 

Katta把节点信息封装到NodeMetaData 对象中。 

 

Table table = new Table(); 

table.addRow(nodeMetaData.getName(), nodeMetaData.getStartTimeAsDate(), nodeState.name()); 

把需要显示的数据封装到Katta的Table中 

 

System.out.println(table.toString()); 

显示出来。

 

转自:http://zkl-1987.iteye.com/blog/366974

分享到:
评论
1 楼 di1984HIT 2013-02-14  
呵呵,我学习一下。

相关推荐

Global site tag (gtag.js) - Google Analytics