Ich benutze ActiveMQ in einem .Net-Programm und ich bin mit Nachrichten-Ereignissen überflutet.Wie kann ich die Menge an Nachrichten, die von ActiveMQ in meiner C# -App kommen, drosseln?
Kurz gesagt, wenn ich ein Queue-Ereignis 'onMessage (IMessage receivedMsg)' bekomme, lege ich die Nachricht in eine interne Warteschlange, aus der X-Threads ihre Sache machen.
Zuerst hatte ich: "AcknowledgementMode.AutoAcknowledge" beim Erstellen der Sitzung, so nehme ich an, dass alle Nachrichten in der Warteschlange wurde abgesaugt und in die Speicherwarteschlange (was ist riskant, da mit einem Absturz, alles ist) hat verloren).
Also habe ich verwendet: 'AcknowledgementMode.ClientAcknowledge' beim Erstellen der Sitzung, und wenn ein Arbeiter mit der Nachricht fertig war, ruft er die 'commit()' Methode für die Nachricht auf. Allerdings werden immer noch alle Nachrichten aus der Warteschlange abgesaugt.
Wie kann ich konfigurieren, dass NUR eine X Anzahl von Nachrichten verarbeitet wird oder sich in einer internen Warteschlange befindet und nicht alles sofort heruntergeladen wird?
Obwohl ich ActiveMQ nie berührt habe - können Sie das nicht umdrehen: Richten Sie N Threads mit ActiveMQ-Listenern ein und verarbeiten Sie die Nachrichten innerhalb des Listenereignisses? –
@will hughes: mein ganzes Programm ist auf eine asynchrone Weise geschrieben. So wird sogar der DB-Zugriff asynchron mit Rückrufen durchgeführt. Also kann ich nicht bei der Veranstaltung bleiben. – Toad