Ich schreibe eine Anwendung, um Ereignisse zu behandeln, die von Geräten ausgelöst werden (1 Million pro Stunde). Einige Ereignisse werden aggregiert (und haben eine lange Zeitspanne (z. B. 48 Stunden)), die ein Begin-Ereignis, einen Status (x-mal) -Ereignisse und ein Endereignis enthalten. Andere sind einzelne Ereignisse, die sofort verarbeitet werden können. Um die Ereignisse mindestens einmal zu garantieren, werde ich auf Akka-Persistenz achten. Andere Teile der Anwendung verwenden bereits akka und kafka.Akka persistente Nachricht (en) löschen
Die Lösung, die ich anstrebte, sollte eine persistente Karte enthalten, in der die Ereignisse von ihrer eventId leicht ausgewählt werden können. Die Reihenfolge ist weniger wichtig. Nach Abschluss der Verarbeitung eines Ereignisses kann es aus der Karte entfernt werden (und sollte nicht mehr beibehalten werden).
In den docs/examples found fand ich Queue-Beispiele, die die Purge-Anforderung pro Ereignis erfüllen, aber kämpfen mit der einfachen Suche (Warteschlange muss geloopt werden, um das Ereignis zu finden). Und um die einfache Suche zu erfüllen, dachte ich an eine Karte, die das PersistentActor-Merkmal und einige db darunter verwendet. Ereignisse werden jedoch durch Sequenznummer bereinigt (was Ereignisse entfernen würde, die mehr Verarbeitung benötigen/auf andere Ereignisse warten). Ein anderes Merkmal, das untersucht wird, ist die AtLeastOnceDelivery, mit der Lieferbestätigung, die die Anforderungen erfüllt, aber diese blockiert die Wiederherstellung, bis alle Ereignisse verarbeitet sind.
Irgendwelche Gedanken darüber, wie man in Akka einen persistenten Korb für Ereignisse implementiert? (Ich benutze scala btw)
Danke für die Beantwortung. Ich habe Ihre Lösung implementiert und einen Hintergrundjob für die Persistency-Schicht hinzugefügt. Der geplante Hintergrundjob prüft auf behandelte Ereignisse und entfernt sie aus der Datenbank. – motormuis
Ich bin froh, dass ich helfen konnte. Darf ich fragen, warum Sie die behandelten Ereignisse löschen? – thwiegan
Da das Speichern der Daten keine Vorteile hat, sind nur Nachteile in Bezug auf die Kosten verbunden. Jedes Ereignis ist ungefähr 20kb, 1 Million Ereignisse pro Stunde. Wir haben nicht so viel Speicherplatz, um es jahrelang laufen zu lassen (und mit Markenprodukten der Hochverfügbarkeit ist es immer noch teuer (Geschäftsanforderungen)). Die Ereignisse sind nutzlos für sich selbst, das heißt, wo die Ereignisverarbeitung stattfindet, Aggregation/Gruppierung von Ereignissen und nur berechnete Ereignisse werden in einer Datenbank gespeichert. – motormuis