MessageService相关
MessageService处理了cassandra中各个节点之间控制信息和数据信息的传递,例如remote insert,get,以及Gossip的信息维护等节点之间要通过发送消息来一起处理任务的事宜;
在系统启动的过程中,会建立一个MessageService的实例,并调用其listen方法,其中会启动一个监听socket连接的线程,并开始在7000端口上进行监听来自其他node上的连接,每当接到一个这样的连接,会产生一个IncomingTcpConnection线程进行此次连接的处理,当然这些是在接收端的接收机制,当接收到消息的时候,对消息进行解析,消息中包含消息头和消息内容部分,具体的消息格式稍后分析,此处预留,之后根据消息的内容创建MessageDeserializationTask线程,在一系列相应的处理之后产生MessageDeliveryTask线程,解析出要执行命令的类型,类型共有:
MUTATION,
BINARY,
READ_REPAIR,
READ,
READ_RESPONSE,
STREAM_INITIATE,
STREAM_INITIATE_DONE,
STREAM_FINISHED,
STREAM_REQUEST,
RANGE_SLICE,
BOOTSTRAP_TOKEN,
TREE_REQUEST,
TREE_RESPONSE,
JOIN,
GOSSIP_DIGEST_SYN,
GOSSIP_DIGEST_ACK,
GOSSIP_DIGEST_ACK2,
从而调用不同的线程池,真正的消息的内容进行处理,并返回结果
在发送消息端,消息都是通过MessageService.java中相应的方法发送,例如:SecdRR,SendOneWay,分别表示发送一个需要callback和不需要callback的消息,在这些函数内部,根据消息的目的地建立相应的连接,例如SendOneWay中从连接池取得一个连接,并将消息发送过去,消息发送过程结束;