# 资源调度器

资源调度器在风铃虫中负责进行资源的调度,是风铃虫中的灵魂存在。

资源调度器功能如下:

  1. 接收所有未过滤的链接
  2. 从资源池中获取一个链接
  3. 将接收的资源过滤后放入资源缓存器

目前风铃虫中内置的资源调度器有:

  • 内存调度器
  • redis调度器

# 内存调度器

核心代码如下

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

使用内存调度器是风铃虫默认使用的资源调度器,它是基于内存实现。

# Redis调度器

核心代码如下

//获取风铃虫实例
Crawler crawler = ...
//注意此步骤一定要在风铃启动之前进行
RedisScheduler redisScheduler = 
    new RedisScheduler("redis资源调度器" + UUID.randomUUID().toString(), redisTemplate);
crawler.setScheduler(redisScheduler);
//启动风铃虫
crawler.start();

注意在使用redis调度器调度器时需要为其初始化一个唯一的名字 ,同时要引入 redis 相关的配置。

此外在用户使用集群或分布式时建议用户使用redis资源调度器。

# 自定义资源管理器

除了上述两种风铃虫内置的资源调度器外,用户还可以使用自定义资源管理器。

核心代码如下

1 实现自定义资源调度器

import com.yishuifengxiao.common.crawler.scheduler.Scheduler;

public class CustomScheduler implements Scheduler {

    /**
     * 接收所有的超链接并存储起来
     *
     * @param urls 已经过滤好的超链接
     */
    @Override
    public void push(String... urls) {

     //   这里进行自定义逻辑
    }

    /**
     * 从资源调度器里获取一个资源
     * @return url资源,网页下载器会下载此URL对应的网页
     */
    @Override
    public String poll() {
        //   这里进行自定义逻辑
        return null;
    }

    /**
     * 清空任务
     */
    @Override
    public void clear() {
        //   这里进行自定义逻辑
    }

    /***
     * 返回资源调度器的名字
     * @return 资源调度器的名字,不能为空且要保证唯一
     */
    @Override
    public String getName() {
        //   这里进行自定义逻辑
        return 一个唯一的值;
    }
}

2 应用自定义资源调度器

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


Last Updated: 1/7/2020, 10:34:40 PM