001
002package io.vrap.rmf.base.client.http;
003
004import java.time.Duration;
005import java.util.concurrent.ExecutorService;
006import java.util.concurrent.ScheduledExecutorService;
007
008import dev.failsafe.spi.Scheduler;
009
010/**
011 * Middleware to limit the number of concurrent request using a Queue
012 *
013 * @include.example io.vrap.rmf.base.client.QueueMiddlewareTest#queueConfiguration()
014 */
015public interface QueueRequestMiddleware extends Middleware {
016    public static QueueRequestMiddleware of(final ExecutorService executorService, final int maxRequests,
017            final Duration maxWaitTime) {
018        return new QueueMiddleware(executorService, maxRequests, maxWaitTime);
019    }
020
021    public static QueueRequestMiddleware of(final ScheduledExecutorService executorService, final int maxRequests,
022            final Duration maxWaitTime) {
023        return new QueueMiddleware(executorService, maxRequests, maxWaitTime);
024    }
025
026    public static QueueRequestMiddleware of(final Scheduler scheduler, final int maxRequests,
027            final Duration maxWaitTime) {
028        return new QueueMiddleware(scheduler, maxRequests, maxWaitTime);
029    }
030
031    public static QueueRequestMiddleware of(final int maxRequests, final Duration maxWaitTime) {
032        return new QueueMiddleware(maxRequests, maxWaitTime);
033    }
034}