# 状态监听

# 状态监控器

在使用风铃虫时,我们一般都很关心风铃虫实例的运行情况,风铃虫对此提供了内置支持。

状态状态监控器是同步的,请勿在此执行任何可能阻塞进程的操作

核心代码如下

1 创建一个自定义状态监控器

import com.yishuifengxiao.common.crawler.Task;
import com.yishuifengxiao.common.crawler.domain.eunm.Statu;
import com.yishuifengxiao.common.crawler.monitor.StatuObserver;

public class CustomStatuObserver implements StatuObserver {
    /**
     * 任务的状态发生了变化
     * @param task 任务
     * @param statu 变化之后的状态
     */
    @Override
    public void update(Task task, Statu statu) {
           //自定义业务逻辑
    }
}


2 应用自定义状态监控器

        //获取风铃虫实例
        Crawler crawler = ...
        //注意此步骤一定要在风铃启动之前进行
        crawler.setStatuObserver(new CustomStatuObserver())
        //启动风铃虫
        crawler.start();

# 事件监听器

事件监听器主要是监听风铃虫实例在运行过程中的各种事件,使用自定义事件监听器的示例如下

事件监听器是同步的,请勿在此执行任何可能阻塞进程的操作

1 创建一个自定义事件监听器


import com.yishuifengxiao.common.crawler.Task;
import com.yishuifengxiao.common.crawler.domain.entity.Page;
import com.yishuifengxiao.common.crawler.listener.CrawlerListener;

public class CustomCrawlerListener implements CrawlerListener {

    /**
     * 下载页面失败的消息
     *
     * @param task 当前任务信息
     * @param page 原始的页面信息
     * @param e    失败的原因
     */
    @Override
    public void onDownError(final Task task, Page page, Exception e) {
        //自定义业务逻辑
    }

    /**
     * 下载页面成功的消息
     *
     * @param task 当前任务信息
     * @param page 原始的页面信息
     */
    @Override
    public void onDownSuccess(final Task task, Page page) {
        //自定义业务逻辑
    }

    /**
     * 解析页面失败的消息
     *
     * @param task 当前任务信息
     * @param page 原始的页面信息
     * @param e    失败的原因
     */
    @Override
    public void onExtractError(final Task task, Page page, Exception e) {
        //自定义业务逻辑
    }


    /**
     * 解析页面成功的消息
     *
     * @param task 当前任务信息
     * @param page 原始的页面信息
     */
    @Override
    public void onExtractSuccess(final Task task, Page page) {
        //自定义业务逻辑
    }

    /**
     * 任务因为被目标服务器封杀而退出
     *
     * @param task 当前任务信息
     */
    @Override
    public void exitOnBlock(final Task task) {
        //自定义业务逻辑
    }

    /**
     * 任务因为已经完成而退出
     *
     * @param task 当前任务信息
     */
    @Override
    public void exitOnFinish(final Task task) {
        //自定义业务逻辑
    }
}

2 应用自定义事件监控器

        //获取风铃虫实例
        Crawler crawler = ...
        //注意此步骤一定要在风铃启动之前进行
        crawler.setCrawlerListener(new CustomCrawlerListener ())
        //启动风铃虫
        crawler.start();
Last Updated: 1/7/2020, 10:34:40 PM