2016-05-26 11 views
0

Camel Throttler-Komponente verwenden können Sie eine Obergrenze für die Geschwindigkeit der konsumierten Nachrichten pro Zeitraum definieren, zB:Gasverbrauchsrate aller JMS Verbraucher auf einem ActiveMQ hören Warteschlange

from("activemq:queueA").throttle(10).to("direct-vm:bla") 

Was ich als nicht ideal sehen ist, dass Camel Throttler den Austausch im Gedächtnis behält, während sie vom Throttler blockiert werden. Wenn Sie also 100 Warteschlangen-Consumer haben und aus irgendeinem Grund die "direct-vm: bla" langsam ist (z. B. einen externen langsamen Dienst aufrufen), haben Sie möglicherweise bis zu 100 Austauschvorgänge im Speicher!

Ich habe mich gefragt, ob es eine ActiveMQ-Funktion gibt, um die Drosselungsanforderung auf der ActiveMQ-Ebene aufzuerlegen. Vielleicht sogar auf einer Warteschlangenebene. Ähnlich wie Consumer-Max-Rate von HornetQ.

Antwort

1

Konfigurieren Sie den Consumer für die Verwendung einer Transaktion (muss keine XA-Transaktion sein. Wenn Sie nur einen anderen Endpunkt verwenden, verwenden Sie eine lokale JMS-Transaktion. Siehe: LLR-Transaktionsansatz). Wenn die Camel-Route fehlschlägt, werden die Nachrichten an den Broker zurückgegeben.

+0

THX für die Antwort Matt, aber wie das würde mir helfen, die Drosselung zu tun? – Vassilis

+0

Sie müssten näher auf den Grund für die Drosselung eingehen. Normalerweise möchte ich einem bereits langsamen Verbraucher keine Drosselung hinzufügen. Wenn Sie nur einen Gashebel hinzufügen möchten, fügen Sie ihn in die Transaktionsroute ein. Wenn die Route oder der letzte Endpunkt fehlschlägt, rollt die Nachricht immer noch zum Broker zurück - auch wenn sie gedrosselt wurde. –

+0

Der Grund dafür liegt in der Vereinbarung mit der dritten Partei, die den Web Service freigibt, den die Kamelroute anruft. Was Sie vorschlagen, würde den Trick in dem Sinne tun, dass, wenn aus irgendeinem Grund die Route fehlschlägt, die Nachrichten in die ActiveMQ-Warteschlange zurückgesetzt werden und erneut konsumiert werden. Ich stimme dem zu. Aber ich hatte gehofft, einen Weg zu finden, die Drosselung auf der ActiveMQ-Ebene und nicht auf der Camel Route-Ebene zu verhängen. – Vassilis