循序渐进企业级搜索引擎之Master模块设计及实现-系统请求响应封装模块
2014-03-09 11:56
627 查看
2.2 系统请求响应封装模块
系统首先从request的信息中获取请求的类型,并依据请求的类型获取相应的处理类,
接下来就是对request的处理,首先是一个基类处理如下:
每个handler都是对RequestHandlerBase扩展,需要扩展的是handleRequest和handleResponse
具体处理index的类如下:
在系统index线程池中放入一个indextask,该线程池初始化的大小是系统cpu的个数,具体的excute执行如下代码:
首先依据slaves的负载情况选择一个处理的客户端,并依据此客户端获取执行实例ChameleonExcute,接下来就是请求到客户端处理实际的索引。而CalculateLoadUtil就是系统处理负载均衡模块的入口,接下来具体讲解。
系统首先从request的信息中获取请求的类型,并依据请求的类型获取相应的处理类,
if (handler == null && path.length() > 1) { handler = HandlerFactory.getHandler(path); }
//依据请求的命令来获取响应的处理类 public static ChameleonRequestHandler getHandler(String cmd) { ChameleonRequestHandler handler = null; if (cmd.equalsIgnoreCase(ChameleonConstants.INDEX) || cmd.equalsIgnoreCase(ChameleonConstants.UPDATE) || cmd.equalsIgnoreCase(ChameleonConstants.CRAWLER) || cmd.equalsIgnoreCase(ChameleonConstants.DELETEQUERY) || cmd.equalsIgnoreCase(ChameleonConstants.DELETETERM)) handler = (ChameleonRequestHandler) WebAppContextUtil .getBean("indexRequestHandler"); … return handler; }
接下来就是对request的处理,首先是一个基类处理如下:
public abstract class RequestHandlerBase implements ChameleonRequestHandler{ @Override public void handle(ChameleonQueryRequest req, ChameleonQueryResponse rsp) { startHandle(req,rsp); } private void startHandle(ChameleonQueryRequest req, ChameleonQueryResponse rsp){ handleResponse(rsp,handleRequest(req)); } public abstract String handleRequest(ChameleonQueryRequest req); public abstract void handleResponse(ChameleonQueryResponse rsp,String result); } @Override public void handle(ChameleonQueryRequest req, ChameleonQueryResponse rsp) { startHandle(req,rsp); } private void startHandle(ChameleonQueryRequest req, ChameleonQueryResponse rsp){ handleResponse(rsp,handleRequest(req)); } public abstract String handleRequest(ChameleonQueryRequest req); public abstract void handleResponse(ChameleonQueryResponse rsp,String result);
每个handler都是对RequestHandlerBase扩展,需要扩展的是handleRequest和handleResponse
具体处理index的类如下:
@Override public String handleRequest(ChameleonQueryRequest req) { MasterCfgManager.getIndexPool().execute(new IndexTask(req)); return null; } @Override public void handleResponse(ChameleonQueryResponse rsp, String code) { //to do }
在系统index线程池中放入一个indextask,该线程池初始化的大小是系统cpu的个数,具体的excute执行如下代码:
@Override public void excuteProvider(ChameleonQueryRequest cqr) throws BaseException { ZooKeeperClientInfo client = CalculateLoadUtil .selector(CalculateServerType.ALL); ChameleonExcute ce = SlaveClientFactory.getInstance("", "") .createClient(ChameleonExcute.class, client.getIp()); ce.parallelMultiIndex(cqr.getBody()); }
首先依据slaves的负载情况选择一个处理的客户端,并依据此客户端获取执行实例ChameleonExcute,接下来就是请求到客户端处理实际的索引。而CalculateLoadUtil就是系统处理负载均衡模块的入口,接下来具体讲解。
相关文章推荐
- 循序渐进企业级搜索引擎之Master模块设计及实现-系统加载
- PDA电子邮件系统中邮件识别与封装模块的设计与实现
- 模块管理常规功能自定义系统的设计与实现(35--终级阶段 综合查询[2])
- JAVA实现简单系统登陆注册模块的设计(附详细代码分析)
- 模块管理常规功能自定义系统的设计与实现(39--终级阶段 综合查询[6])
- 企业级服务器设计与实现经验之系统框架(一)
- 如何设计实现真正的响应式微服务系统?
- 【转载】企业级服务器设计与实现经验之插件系统--功能插件 .
- 模块管理常规功能自定义系统的设计与实现(15--进一步完善"省份"模块)
- 面向搜索引擎的内容管理系统(CMS)设计——利用Squid反相代理缓存实现网站内容静态发布 转贴
- 模块管理常规功能自定义系统的设计与实现(18--模块附件的设计[1])
- 模块管理常规功能自己定义系统的设计与实现(36--终级阶段 综合查询[3])
- 企业级服务器设计与实现经验之系统框架(二)--功能/应用服务器主体框架
- 模块管理常规功能自定义系统的设计与实现(30--第二阶段总结)
- IM系统中聊天记录模块的设计与实现
- 设计与实现模块管理系统的基本功能定义自己的(38--终极阶段 综合查询[5])
- HTTP代理实现请求报文的拦截与篡改6--从目标服务器接收响应报文并封装
- 模块管理常规功能自定义系统的设计与实现(13--Grid导航设计初步[3])
- 【4-2 前端模块】云跳板机服务系统设计及实现