public void shutdown() { for (DataQueue q : topology.getAllDataQueue()) { for (DataBolt bolt : q.bolts) { bolt.shutdown(); } } workPool.shutdownNow(); }
/** 等待所有的Spout结束,用在分析单个文件的时候。等待所有日志处理完成。 */ public void waitAllSpoutDone() { while (fileSpout != null && !fileSpout.isClosed()) { synchronized (fileSpout) { try { fileSpout.wait(1000); } catch (InterruptedException e) { } } } for (DataQueue q : topology.getAllDataQueue()) { while (q.status == DataQueue.RUNNING) { synchronized (q) { try { q.wait(1000); } catch (InterruptedException e) { } } } } }
/** 服务开始启动, 0. 初始化Redis数据库连接。 1. 加载所有blot,初始化状态数据。 2. 加载spout 开始处理数据 */ public void start() { int coreWrokerSize = Settings.getInt(Settings.CORE_WORKER_SIZE, 10); int queueSize = Settings.getInt(Settings.WRITE_LOG_QUEUE_SIZE, 1024); taskQueue = new LinkedBlockingDeque<Runnable>(queueSize); log.debug( "start message process thread pool, core size:" + coreWrokerSize + ", queue size:" + queueSize); workPool = new ThreadPoolExecutor(coreWrokerSize, coreWrokerSize * 2, 10, TimeUnit.SECONDS, taskQueue); String appKey = Settings.getString(Settings.TAODIAN_APPID, null); // System.getProperty(""); String appSecret = Settings.getString(Settings.TAODIAN_APPSECRET, null); String appRoute = Settings.getString(Settings.TAODIAN_APPROUTE, "http://api.zaol.cn/api/route"); boolean inSAE = Settings.getString("in_sae", "n").equals("y"); if (appKey != null && appSecret != null) { api = new TaodianApi(appKey, appSecret, appRoute, inSAE ? "simple" : "apache"); } else { log.info("The taodian.api_id and taodian.api_secret Java properties are required."); System.exit(255); } ds = new DataService(); if (!ds.start(workPool, api)) { log.error("Data service start failed"); System.exit(255); } topology = new DefaultSimpleTopology(workPool); TopologyBuilder builder = null; // new SimpleTopologyBuilder(); String topolgyName = Settings.getString(Settings.TOPOLOGY, "default_topology.cfg"); File f = new File(topolgyName); InputStream ins = null; if (f.isFile()) { log.info("Load topology from file, " + f.getAbsolutePath()); try { ins = new FileInputStream(f); } catch (FileNotFoundException e) { log.error(e, e); } } else { ins = this.getClass().getClassLoader().getResourceAsStream(topolgyName); } if (ins != null) { builder = new SimpleTopologyBuilder(ins); } builder.buildToplogy(topology, new ObjectFactory()); if (fileSpout != null) { topology.setSpout(Settings.INPUT_SPOUT, fileSpout); } else { String clickGate = Settings.getString(Settings.CLICK_GATE_LOG_URL, ""); HTTPURLSpout spout = new HTTPURLSpout(); if (spout.connect(clickGate)) { topology.setSpout(Settings.INPUT_SPOUT, spout); } } topology.start(); }