From ac912e8f1fade5be3b0d8df521819f4b01ec6fba Mon Sep 17 00:00:00 2001
From: Joe Zhou <zhoushuqun@gmail.com>
Date: Sat, 12 Nov 2022 10:17:36 +0800
Subject: [PATCH] Revise QueueScheduler to support capacity-restricted.

---
 .../webmagic/scheduler/QueueScheduler.java    | 23 +++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/webmagic-core/src/main/java/us/codecraft/webmagic/scheduler/QueueScheduler.java b/webmagic-core/src/main/java/us/codecraft/webmagic/scheduler/QueueScheduler.java
index f9ad0e98..8ea3ab19 100644
--- a/webmagic-core/src/main/java/us/codecraft/webmagic/scheduler/QueueScheduler.java
+++ b/webmagic-core/src/main/java/us/codecraft/webmagic/scheduler/QueueScheduler.java
@@ -16,11 +16,30 @@ import java.util.concurrent.LinkedBlockingQueue;
  */
 public class QueueScheduler extends DuplicateRemovedScheduler implements MonitorableScheduler {
 
-    private BlockingQueue<Request> queue = new LinkedBlockingQueue<Request>();
+    private final BlockingQueue<Request> queue;
+
+    public QueueScheduler() {
+        this.queue = new LinkedBlockingQueue<>();
+    }
+
+    /**
+     * Creates a {@code QueueScheduler} with the given (fixed) capacity.
+     *
+     * @param capacity the capacity of this queue,
+     * see {@link LinkedBlockingQueue#LinkedBlockingQueue(int)}
+     * @since 0.8.0
+     */
+    public QueueScheduler(int capacity) {
+        this.queue = new LinkedBlockingQueue<>(capacity);
+    }
 
     @Override
     public void pushWhenNoDuplicate(Request request, Task task) {
-        queue.add(request);
+        try {
+            queue.put(request);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        }
     }
 
     @Override