Frage

Ich bin ein ActiveMQ / Camel Noob mit einem bestimmten Szenario vor Augen, frage ich mich zunächst, ob es möglich ist, und zweitens, ob jemand könnte eine wenig Richtung geben.

Im Grunde muss ich dynamische Drosselung aus der Warteschlange auszuführen. I.E die Fähigkeit zur Laufzeit setzen die Rate eine bestimmte Gruppe von Nachrichten aus der Warteschlange verbraucht wird.

So könnte ich zum Beispiel eine Gruppe von Nachrichten hinzufügen, die bei 10 pro Sekunde, eine andere Gruppe verbraucht werden soll, die bei 1 pro Sekunde und so weiter verbraucht werden sollten.

Ich kenne die Grundlagen der Einrichtung Routen in Kamel und die Nachricht in die Warteschlange etc Gruppierung, sondern kann einfach dies aus der Dokumentation nicht herausgefunden.

War es hilfreich?

Lösung

Ja sieht aus wie Sie für Makler Seite suchen Drosselung der Verbraucher zu vermeiden, zu blockieren.

Haben Sie erhöhen Ihre Anfrage an dem ActiveMQ Benutzer / dev Forum?

Andere Tipps

könnten Sie verwenden nur Camel bestehenden throttler dann eine andere Warteschlange für jede Art unter Verwendung von von Nachrichten, bei denen Sie einen anderen Drosselungsrate konfigurieren müssen?

z.

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  

Warum Sie keine RFE im Apache Camel JIRA hinzufügen?

Was sind Ihre Logik für die Rate für eine bestimmte Gruppe von Nachrichten zu bestimmen?

Wenn andere Gruppe von Nachrichten im ganzen gleichen throttler geht kann es komplex. Es braucht ein bisschen Scheider jede Nachricht, um zu bestimmen, welche Gruppe es auf und gehört damit die Rate sollte mit der Drosselungs wird passieren.

Wenn Sie einige Zeit dauern, in Ihrem Anwendungsfall zu füllen und das RFE einzuloggen, dann bin ich sicher, dass die Camel Community können Entwickler helfen.

Sie können versuchen, es selbst zu implementieren. Im Grunde ist alles ein Prozessor, so dass man von einem machen kann ( "activemq: Warteschlange: foo") Prozess (myOwnThrottler) .to ( "Bean: handle");.

Sie können einige der Klassen in Camel verlängern: - DelegateProcessor - DelayProcessorSupport - Throttler


Claus Ibsen Apache Camel Committer

Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/

OK, ich werde das Szenario in etwas mehr Detail auslegen und den Hauptblocker hervorzuheben, soweit ich das beurteilen kann.

Ich habe 2 Gruppen von Nachrichten (in Wirklichkeit mit der Skala viel größer), die jeweils mit einer anderen Drosselung Bedarf -. Lassen Sie uns sagen, ich diese angeben im Message-Header als Durchfluss- und flowTime

  • Gruppe 1: Strömungsrate = 1; flowTime = 60 (1 pro Minute)
  • Gruppe 2: Durchfluss = 1; flowTime = 1 (1 pro Sekunde)

ich einen Prozessor gemäß Claus implementieren, die die Header-Felder untersucht und verwendet sie als Verzögerer Eingang.

Ich füge 20000 Meldungen aus der Gruppe 1 und 20000 aus Gruppe 2

Da die Drosselungsverbraucherseite ist, aktiviert die Verzögerer von Gruppe 1 führt dazu, dass es langsam werden, indem schnell seine Eingangspuffer und Gruppen Füllung 2 Nachrichten werden dann stecken bleiben ... auch wenn ich mehrere Warteschlangen gemäß James .

Ich weiß, dass ich kann Gruppe die Nachricht mit dem JMXGroupID-Headers und mehr Verbraucher implementieren, aber glaube nicht, dass die Anforderung skalieren würde zur Aufnahme von n Gruppen.

Was ich frage mich, im Grunde ist, wenn es eine Möglichkeit ist Broker zu tun, anstatt Verbraucherseite Drosselung oder eine andere Lösung, wodurch die Verbraucher ohne letztlich blockiert drosseln können.

Hope erklärte ich habe mich klar und vielen Dank für die Anregungen so weit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top