循序渐进企业级搜索引擎之Master模块设计及实现-系统请求响应封装模块

原创 2014年03月09日 11:56:04

2.2 系统请求响应封装模块

 

系统首先从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扩展,需要扩展的是handleRequesthandleResponse

具体处理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模块设计及实现-系统加载

第二章              Master模块设计及实现 Master具体细分为系统配置及监控加载模块、请求及相应封装处理模块、统计模块、监控及负载均衡等模块。具体的关系图如下:   ...
  • letueo
  • letueo
  • 2014年03月08日 17:26
  • 1097

电商搜索引擎实践(工程篇)

随着互联网数据规模的爆炸式增长, 如何从海量的历史, 实时数据中快速获取有用的信息, 变得越来越有挑战性. 一个中等的电商平台, 每天都要产生百万条原始数据, 上亿条用户行为数据. 一般来说, 电商数...
  • abv123456789
  • abv123456789
  • 2016年03月27日 22:16
  • 4110

2017.7.14 慕课网-Java从零打造企业级电商项目实战:for4 product模块接口设计

后台接口  /manage/product /manage/product/list.do 查询商品列表 选项 说明 URL /list.do...
  • liyuhui195134
  • liyuhui195134
  • 2018年01月04日 16:41
  • 71

慕课网-Java从零打造企业级电商项目实战:3 category模块设计与开发

6品类模块设计与开发 6.1要实现的功能 6.2 mmall_category表 6.3 品类模块接口设计 6.4/manage/category/add_category.do ...
  • hello_YaZe
  • hello_YaZe
  • 2017年10月31日 14:56
  • 1

2017.7.1 慕课网-Java从零打造企业级电商项目实战:2用户模块设计与开发

2. 用户模块设计与开发 2.1 要实现的功能   2.2 mmall_user表   2.3 用户模块接口设计 2017.7.3 慕课网-Java从零打造企业级电商项目实战:fo...
  • liyuhui195134
  • liyuhui195134
  • 2018年01月04日 16:41
  • 19

企业级应用中统一配置模块的设计

 简介: 在企业级应用的开发和运行中,配置数据是必不可少的。在以往的应用中,配置数据往往以许多不同方式保存,比如:文件、注册表以及数据库等。对配置数据的松散管理造成了在应用系统运行过程中查找、使...
  • cxzhq2002
  • cxzhq2002
  • 2015年02月25日 19:19
  • 607

ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)

ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)  课程讲师:Tiger     课程分类:.net         适合人群:高级       课时数...
  • u013019627
  • u013019627
  • 2014年01月13日 14:22
  • 2356

ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)

ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)  课程讲师:Tiger     课程分类:.net         适合人群:高级       课时数...
  • u013019627
  • u013019627
  • 2014年01月06日 13:06
  • 2100

Maven学习 (六) 搭建多模块企业级项目

首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目。 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xm...
  • renzhe333
  • renzhe333
  • 2013年08月27日 11:56
  • 640

企业级电商一般包含哪些模块总结

随着全球信息化进程的不断发展和深入,电子商务日渐盛行,B2C模式开始崛起,越来越多的企业正在或计划建立自己的在线商务渠道,B2C电子网站必将雨后春笋般涌现。相对于大的电子商务平台,垂直细分类的B2C电...
  • fuyifang
  • fuyifang
  • 2015年07月16日 21:42
  • 5301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:循序渐进企业级搜索引擎之Master模块设计及实现-系统请求响应封装模块
举报原因:
原因补充:

(最多只允许输入30个字)