自动事件是为了在java语法上使用更加方便而做的设计,但是后来更多的是实现插件功能。自动事件核心的类是:com.virjar.vscrawler.core.event.support.AutoEventRegistry,她有两个核心方法,分别是:

  1. com.virjar.vscrawler.core.event.support.AutoEventRegistry#registerEvent:用来自动注册事件类型,其参数是一个interface的的Class对象,内部所作的事情是为这个接口动态代理一个实现类,实现类的工作则是将接口所有得参数信息包裹成一个event对象,然后投递到eventLoop的delayQueue里面。这样通过调用接口直接调用方法,就产生来一个自动的事件。
  2. com.virjar.vscrawler.core.event.support.AutoEventRegistry#registerObserver:用来注册事件处理器,它可以是任何对象,注册器会扫描每个公有方法,看是否能够和事件类型匹配,如果匹配上了,就会会这个方法产生一个自动处理事件的代理对象,代理对象的逻辑则是通过反射,加上第一条所述的event参数,调用具体的实现类。

这样,上一个章节的demo代码,可能你就可以看明白了。

当前已经注册的事件类型

系统已经定义了一些VS相关的事件,并且在对应逻辑触发点触发了事件,你可以直接注册观察者,即可监听这些事件。

事件类型 含义 是否是同步事件
com.virjar.vscrawler.core.event.systemevent.CrawlerConfigChangeEvent 当VS标准控制文件内容发生变更,将会产生此事件 true
com.virjar.vscrawler.core.event.systemevent.CrawlerEndEvent 当爬虫结束的时候,将会产生此事件,可以用这个事件处理资源关闭回收等逻辑 true
com.virjar.vscrawler.core.event.systemevent.CrawlerStartEvent 当爬虫开始的时候,产生此事件 false
com.virjar.vscrawler.core.event.systemevent.FirstSeedPushEvent 当第一个种子加入到种子管理器的时候,触发的事件,这个事件VSCrawler很关注,因为一旦种子管理器没有种子,VS的派发线程将会暂停等待,如果收到了此消息,等待将会被激活 false
com.virjar.vscrawler.core.event.systemevent.NewSeedArrivalEvent 对于VS来说,可以通过多种方式来增加新的种子,甚至可以通过事件机制,比如这个事件,seedmanager有监听这个事件,如果你通过事件机制发送种子到种子管理器,也是可以被处理的 false
com.virjar.vscrawler.core.event.systemevent.SeedEmptyEvent 当种子为空的时候,发生此事件,你可能有印象,前几个章节又一次运用这个事件实现在一段时间没有任务处理就关闭爬虫的demo。 false
com.virjar.vscrawler.core.event.systemevent.SessionBorrowEvent 当seesion被分发的时候,产生此事件,这个很有用,如果你的种子账号数据,那么可以通过这个实现自动登录(当然在session内部登录也是可以的) true
com.virjar.vscrawler.core.event.systemevent.SessionCreateEvent 当session被创建的时候,产生此事件,目前自动登录插件就是监听这个事件,如果登录失败,会置换session可用性状态,sessionManager在发现这个flag的时候,将会判定这个session不是可用session,会直接抛弃他 true
com.virjar.vscrawler.core.event.systemevent.SessionDestroyEvent 当session被销毁的时候,产生此事件,你可以借此回收绑定在session上面资源,如用户账户数据 true
com.virjar.vscrawler.core.event.systemevent.UserLoginEvent 当用户登录的时候,发生的事件 false
com.virjar.vscrawler.core.event.systemevent.UserStateChangeEvent 当用户状态发生改变的时候产生此事件,如账户被目标网站禁用,目前这个事件还没有接入 false

CrawlerConfigChangeEvent 一个特殊的事件

她有多特殊呢,基于这个事件,可以实现爬虫的动态配置,VS有一个配置文件,名字叫做vsCrawler.properties 这里面可以写一些配置信息。这样VS内部就可以通过properties的形式获取到这些配置数据了,但是这个也不是特别牛逼的点儿,最牛逼的是他和文件监听,事件循环机制结合起来。实现了配置文件热发功能,也就是说,如果你的组件监听了这个事件,那么每次配置文件变更的时候,都会被事件机制回调。这样可以不停机控制爬虫。这里有一个运用,叫做爬虫线程数目热发控制。在爬虫运行过程中,如果你修改了配置文件,并且改动了线程数目配置,那么VS的工作线程数将会同步修改。 当前可以配置参数列表如下:

#爬虫的默认配置,他会被vsCrawler.properties里面的配置项merge,作为真正生效的配置数据传递到各个组件


#爬虫线程数目,默认10个线程
vsCrawler.threadNumber=10


#工作目录,将会存在一些爬虫中间数据
vsCrawler.Working.directory=classpath:work

#初始种子文件
vsCrawler.initSeedFile=


#预计
seedManager.expectedSeedNumber=1000000

其他的配置key值也可以自己添加,然后同样也会传递

results matching ""

    No results matching ""