我正在写一个互联网数据抓取工具。逻辑很简单,Producer找到要抓取的URL链接,将这些url的批量循环放入Queue,然后Consumer逐个从队列中选择此链接并在每个链接上加载HTML文档并对其进行处理。
PRODUCER -> urls batch -> QUEUE -> one URL -> CONSUMER
问题在于我需要向消费者添加延迟,因为消费者的下载请求太快。互联网服务器认为我正在尝试DDOS并阻止我的请求。
我需要添加一些倒计时。当消费者从队列中选择url时,它开始倒计时等于200ms。完成进程url后,需要检查计时器,如果200ms没有通过,则必须等待选择新的url。
答案 0 :(得分:0)
把: Java DelayQueue示例添加到Google和......魔术!就是这样!
您必须使用您的对象(可能是下载的URL或其他内容)并实现延迟界面。然后你有一个生产者,它将数据保存到 BlockingQueue ,最后一个是消费者。这是一个简单的并发解决方案。 例如,教程就在这里:https://examples.javacodegeeks.com/core-java/util/concurrent/delayqueue/java-util-concurrent-delayqueue-example/
如果您要与我们分享代码,也许我们会帮助您自己实施;)
修改强>
正如您在评论中写道,它不适合您。在这里分享你已经写过的代码。 如果您正确实施,这将有效。我们不知道您如何存储URL,如何获取URL以及从哪个集合中获取URL?你的问题非常笼统。