用JAVA实现GAE的任务队列

采集系统最核心的功能就是任务队列,GAE的任务队列足够强大,可以直接作为采集队列,当我把应用从GAE环境移植到纯JAVA环境时不得不重新设计采集队列。

如下是GAE的队列配置
<queue>
<name>MEDIUM</name>
<rate>5/s</rate>
<bucket-size>8</bucket-size>
<max-concurrent-requests>4</max-concurrent-requests>
</queue>

具体实现方式:
1.用JAVA的线程池”java.util.concurrent.ThreadPoolExecutor”实现并发控制

2.用JAVA的”java.util.concurrent.ScheduledExecutorService”实现请求速率控制

3.用JAVA的队列”java.util.concurrent.LinkedBlockingQueue”作为FIFO队列,也可以实现持久化队列

流程:
添加任务到FIFO队列,计划任务每秒执行一次,从FIFO队列中取出1个或多个任务放入线程池