Die Sammlung Aggregator im Mule 2.0-Framework verwendet, funktioniert ein bisschen wie folgt aus:Mule Aggregator - Streaming Aggregation
Eine eingehende Router eine Sammlung von Nachrichten nimmt und es teilt sich in eine Reihe von kleineren Nachrichten bis - je kleinere Nachricht mit einer Korrelations-ID entsprechend der Elternnachricht gestempelt bekommen
Diese Nachrichten fließen durch verschiedene Dienste
Schließlich diese Meldungen in einem eingehenden Aggregator gelangen, die sammelt die Nachrichten basierend auf der Korrelations-ID der übergeordneten Nachricht und der Anzahl der erwarteten Nachrichten. Sobald alle erwarteten Nachrichten empfangen wurden, wird die Aggregationsfunktion aufgerufen und das Ergebnis wird zurückgegeben.
Jetzt funktioniert das gut, wenn die Anzahl der Nachrichten in einer Gruppe relativ klein ist. Sobald jedoch die Anzahl von Nachrichten in einer Gruppe ~ 100k groß wird, wird viel Speicher gebunden, der auf die Gruppe von Nachrichten wartet, die darauf warten, dass die späteren Nachrichten ankommen. Dies wird schlechter, wenn mehrere Gruppen gleichzeitig aggregiert werden.
Ein Weg um dieses Problem wäre, einen Streaming-Aggregator zu implementieren. In meinem Anwendungsfall summiere ich im Wesentlichen die verschiedenen Nachrichten basierend auf einem Schlüssel, und dies könnte durchgeführt werden, ohne alle Nachrichten in der Gruppe gleichzeitig sehen zu müssen. Ich möchte nur wissen, dass alle Nachrichten empfangen wurden, bevor das Ergebnis an den Endpunkt weitergeleitet wird.
Hört sich das nach einer vernünftigen Lösung für das Problem an?
Ist das schon irgendwo in Mule implementiert?
Gibt es bessere Möglichkeiten, dies zu tun?