All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.allegro.tech.hermes.consumers.consumer.rate.ConsumerRateLimitSupervisor Maven / Gradle / Ivy

package pl.allegro.tech.hermes.consumers.consumer.rate;

import pl.allegro.tech.hermes.common.config.ConfigFactory;
import pl.allegro.tech.hermes.common.config.Configs;

import javax.inject.Inject;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.boon.collections.ConcurrentHashSet;

public class ConsumerRateLimitSupervisor implements Runnable {

    private final Set consumerRateLimiters = new ConcurrentHashSet<>();

    @Inject
    public ConsumerRateLimitSupervisor(ConfigFactory configFactory) {
        int period = configFactory.getIntProperty(Configs.CONSUMER_RATE_LIMITER_SUPERVISOR_PERIOD);
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(this, period, period, TimeUnit.SECONDS);
    }

    @Override
    public void run() {
        for (ConsumerRateLimiter limiter : consumerRateLimiters) {
            limiter.adjustConsumerRate();
        }
    }

    public void register(ConsumerRateLimiter consumerRateLimiter) {
        consumerRateLimiters.add(consumerRateLimiter);
    }

    public void unregister(ConsumerRateLimiter consumerRateLimiter) {
        consumerRateLimiters.remove(consumerRateLimiter);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy