2016-08-09 6 views
5

Ich habe eine JMS-Warteschlange. Nach Erhalt der Nachricht muss diese in der Datenbank gespeichert werden. Dann, abhängig von einer Bedingung, möchte ich diese Nachricht an einen Drittanbieter mit fester Rate senden, also verwende ich die Drosselung.Apache Kamel. Drossel Teil der Route

Ich habe die folgende Route:

from("jms:queue") 
      .bean(persistingListener) 
      .choice() 
       .when(some condition ..) 
        .throttle(5) 
        .asyncDelayed() 
        .bean(thirdPartyServiceClient) 
      .endChoice(); 

Allerdings wird die gesamte Strecke gedrosselt wird, nicht die an Dritte Service-Client bezogenen Teil. Ich meine, wenn ich 100 Nachrichten in die Warteschlange bringe, werden nur die ersten 5 gelesen. In diesem Fall wird die Verarbeitung von Nachrichten, für die kein Service von Drittanbietern erforderlich ist, verzögert.

Irgendwelche Ideen, wie man nur auf dem Teil drosselt, der sich auf Dienstleistungen von Drittanbietern bezieht?

Vielen Dank im Voraus

+0

Gibt es eine Chance, dass Ihr Zustand immer wahr ist? Sie sollten auch das Zeitfenster angeben. – alobodzk

+0

@alobodzk, nun, es gibt keine solche Chance und ich denke, es spielt keine Rolle. Standardmäßig ist das Gaszeitfenster auf 1 Sekunde eingestellt. – StasKolodyuk

+0

Legen Sie asyncConsumer = true für den JMS-Endpunkt fest. Siehe seine Dokumentation: http://camel.apache.org/jms –

Antwort

2

Der JMS-Endpunkt läuft in einem Modus standardmäßig, wo jede Nachricht in der Reihenfolge verarbeitet wird JMS. Wenn Sie die Verarbeitung von Nachrichten (aufgrund der asynchronen Verarbeitung) zulassen möchten, müssen Sie diese Option aktivieren, indem Sie auf dem Endpunkt asyncConsumer=true konfigurieren.

Weitere Details in der JMS-Dokumentation: http://camel.apache.org/jms