Thread und Ratelimiter

OnDemand

Top Contributor
Hallo zusamen,

wir nutzen einen RateLimiter von Google glaube Guava heisst der.

Angenommen der wird mit 2 initialisiert.

Java:
this.rateLimiter = RateLimiter.create(2);

An anderer Stelle erstellen wir einen TaskExecutor mit 20 Threads und müssen da den Ratelimiter nutzen um die Ratelimits des Zielsystems nicht zu überschreiten.

Java:
ExecutorService taskExecutor = Executors.newFixedThreadPool(threads);
taskExecutor.execute(() -> {
    sendApi(ratelimiter); //der vorher initailisierte Ratelimiter
});
 try {
         taskExecutor.shutdown();
          taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
 } catch (InterruptedException e) {
          e.printStackTrace();
 }

Verstehe ich es richtig dass der Ratelimiter die Threads ausbremst? Also es erstellt zwar 20 Threads aber sendet eben nur so, dass es innerhalb der Ratelimits bleibt?
Soweit ich es nachforsche, ist der Ratelimiter threadsafe.

Wenn ich also mehr parallel auf die API ausspielen will, muss auch das Ratelimite erhöht werden?
 

httpdigest

Top Contributor
Korrekt.
Alle acquire() Aufrufe auf _derselben_ RateLimiter Instanz führen dazu, dass der RateLimiter die Aufrufer blockiert (bzw. die Aufrufer-Threads warten lässt), um das Limit nicht zu reißen. Es spielt also keine Rolle, mit wievielen Threads du _denselben_ RateLimiter aufrufst.
 

OnDemand

Top Contributor
Tip top danke :)

Heisst also:

Angenommen das Zielsystem sagt max 2 Aufrufe pro Sekunde.

Ich befeuere den aber mit 100 Threads, dann managed der Ratelimiter, dass wir die 2 Aufrufe pro Sek. einhalten?
 

httpdigest

Top Contributor
Ich hatte in einem Projekt auch mal den Guava RateLimitier für genau sowas verwendet. Das Problem bei uns war dabei nur, dass der RateLimiter aufgrund seines thread-basierten Designs "Back Pressure" nur nach vorne kommunizieren kann, indem er die Threads einfach schlafenlegt.
Das Problem hierbei ist, wenn man z.B. seine Anwendungsarchitektur auf non-blocking (z.B. mit Flux/Reactor oder Vert.x) ausgelegt hat. Dann blockiert der eine und möglicherweise einzige Worker Thread.
Wenn man mit non-blocking arbeitet, dann bieten aber Frameworks wie z.B. Reactor aber selber auch Mechanismen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Thread "extern" beenden Netzwerkprogrammierung 3
OnDemand Linux RAM per Thread Netzwerkprogrammierung 3
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
C Thread Netzwerkprogrammierung 9
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
S Socket ThreadPool oder Thread pro Client? Netzwerkprogrammierung 11
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
P Wie spreche ich einen Thread an? Netzwerkprogrammierung 20
M Thread Scheduler Java 5.0? Netzwerkprogrammierung 2
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
B Socket Thread handling / Reader init Netzwerkprogrammierung 8
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Thread Pooling Netzwerkprogrammierung 6
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
B callback thread udp Netzwerkprogrammierung 2
D RMI und Thread Netzwerkprogrammierung 4
S Kommunikationsproblem, Thread und manuel Netzwerkprogrammierung 4
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
K ein Thread pro Stream Netzwerkprogrammierung 2
D Weiterer Thread auf Port 843 horcht Netzwerkprogrammierung 7
D Thread problem Netzwerkprogrammierung 3
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Thread Transport Netzwerkprogrammierung 6
S Socket Thread in Schleife Netzwerkprogrammierung 4
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T synchronized mit thread und rückgabe Netzwerkprogrammierung 4
Q Thread und Sockets... Netzwerkprogrammierung 2
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
PAX Outputstream von anderem Thread verwenden lassen Netzwerkprogrammierung 5
C Server mit Multithreading (Thread-Pool) Netzwerkprogrammierung 2
E java.lang.NullPointerException aber nur wenns im Thread läuf Netzwerkprogrammierung 4
F EIN Thread in RMI auf Serverseite Netzwerkprogrammierung 3
G Server Thread beenden Netzwerkprogrammierung 16
T Socket-Thread: Designfrage Netzwerkprogrammierung 14
S Mit Thread arbeitende Maschine Netzwerkprogrammierung 6
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
K Selbe Streams mehrfach nutzen (zusätl. Thread) Netzwerkprogrammierung 6
ven000m Thread Frage Netzwerkprogrammierung 11
B Thread.start() (run()) excption Netzwerkprogrammierung 2
M Thread läuft nicht weiter Netzwerkprogrammierung 2
B NullPointerException | Thread Netzwerkprogrammierung 4
U Current thread not owner Netzwerkprogrammierung 3
S readline-thread stoppt vorzeitig Netzwerkprogrammierung 6
J RMI - (RemoteException occurred in server thread) Netzwerkprogrammierung 2
S Webserverprogrammierung: Thread-Beschränkung Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
F problem mit thread bzw. netzwerkverbindung! Netzwerkprogrammierung 3
L netzwerk mit thread Netzwerkprogrammierung 3
G RMI thread safe ? Netzwerkprogrammierung 11
A Thread gibt Nachrichten mehrmals aus (Messenger in Java) Netzwerkprogrammierung 3

Ähnliche Java Themen


Oben