cn.wanghaomiao.seimi.def.DefaultLocalQueue Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SeimiCrawler Show documentation
Show all versions of SeimiCrawler Show documentation
一个支持分布式的可以高效开发且可以高效运行的爬虫框架。设计思想上融合了spring与scrapy的优点。
package cn.wanghaomiao.seimi.def;
import cn.wanghaomiao.seimi.annotation.Queue;
import cn.wanghaomiao.seimi.core.SeimiQueue;
import cn.wanghaomiao.seimi.struct.Request;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
/**
* @author 汪浩淼 [email protected]
* @since 2015/7/21.
*/
@Queue
public class DefaultLocalQueue implements SeimiQueue {
private Map> queueMap = new HashMap<>();
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public Request bPop(String crawlerName) {
try {
LinkedBlockingQueue queue = getQueue(crawlerName);
return queue.take();
} catch (InterruptedException e) {
logger.error(e.getMessage(),e);
}
return null;
}
@Override
public boolean push(Request req) {
try {
LinkedBlockingQueue queue = getQueue(req.getCrawlerName());
queue.put(req);
return true;
} catch (InterruptedException e) {
logger.error(e.getMessage(),e);
}
return false;
}
@Override
public int len(String crawlerName) {
LinkedBlockingQueue queue = getQueue(crawlerName);
return queue.size();
}
public LinkedBlockingQueue getQueue(String crawlerName){
LinkedBlockingQueue queue = queueMap.get(crawlerName);
if (queue==null){
queue = new LinkedBlockingQueue<>();
queueMap.put(crawlerName,queue);
}
return queue;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy