一、前言
前面已经分析了 Watcher 机制的主要代码,现在接着分析 Zookeeper 中的请求处理链,其是 Zookeeper 的主要特点之一。
二、总体框图
对于请求处理链而言,所有请求处理器的父接口为 RequestProcessor,其框架图如下
说明:
AckRequestProcessor,将前一阶段的请求作为 ACK 转发给 Leader。
CommitProcessor,将到来的请求与本地提交的请求进行匹配,这是因为改变系统状态的本地请求的返回结果是到来的请求。
FinalRequestProcessor,通常是请求处理链的最后一个处理器。
FollowerRequestProcessor,将修改了系统状态的请求转发给 Leader。
ObserverRequestProcessor,同 FollowerRequestProcessor 一样,将修改了系统状态的请求转发给 Leader。
PrepRequestProcessor,通常是请求处理链的第一个处理器。
ProposalRequestProcessor,将请求转发给 AckRequestProcessor 和 SyncRequestProcessor。
ReadOnlyRequestProcessor,是 ReadOnlyZooKeeperServer 请求处理链的第一个处理器,将只读请求传递给下个处理器,抛弃改变状态的请求。
SendAckRequestProcessor,发送 ACK 请求的处理器。
SyncRequestProcessor,发送 Sync 请求的处理器。
ToBeAppliedRequestProcessor,维护 toBeApplied 列表,下个处理器必须是 FinalRequestProcessor 并且 FinalRequestProcessor 必须同步处理请求。
UnimplementedRequestProcessor,用于管理未知请求。
三、RequestProcessor 源码分析
RequestProcessor 是所有处理器的父接口,其定义了处理器的处理方法,其源码如下
- public interface RequestProcessor {
- @SuppressWarnings("serial")
- public static class RequestProcessorException extends Exception {
- public RequestProcessorException(String msg, Throwable t) {
- super(msg, t);
- }
- }
- void processRequest(Request request) throws RequestProcessorException;
- void shutdown();
- }
说明:RequestProcessor 源码非常简单,内部类 RequestProcessorException,用来表示处理过程中的出现的异常,而 processRequest 和 shutdown 方法则是核心方法,是子类必须要实现的方法,处理的主要逻辑在 processRequest 中,通过 processRequest 方法可以将请求传递到下个处理器,通常是单线程的。而 shutdown 表示关闭处理器,其意味着该处理器要关闭和其他处理器的连接。
四、总结
本篇博文主要学习了 RequestProcessor 的相关源码,其定义了处理器的处理逻辑,也分析其子类的大体介绍,之后会详细分析各个处理器的源码,谢谢各位园友的观看~
来源: http://www.cnblogs.com/leesf456/p/6410793.html