Wie kann verhindert werden, dass Nachrichten mit PriorityExecutorBasedEventDrivenDispatcher neu angeordnet werden?

StackOverflow https://stackoverflow.com/questions/8354958

Frage

Mein Akka FSM-Akteur muss Nachrichten abhängig vom Typ priorisieren. Um genau zu sein, empfängt der Akteur Nachrichten in einer dieser Kategorien in priorisierter Reihenfolge:

  1. Nachrichten, die Statusübergänge auslösen
  2. Nachrichten, die den aktuellen Status abfragen
  3. Nachrichten, die den Schauspieler veranlassen, einige Arbeiten auszuführen ("WorkMsg")

    Gemäß den Akka-Dokumenten können Nachrichten gemäß der obigen Liste mit einem PriorityExecutorBasedEventDrivenDispatcher mit einem PriorityGenerator priorisiert werden. Ich habe den FSM-Akteur mit diesem Dispatcher implementiert und er funktioniert gut.

    Das Problem ist, dass dieser Dispatcher auch WorkMsgs neu anordnet, was nicht das ist, was ich will.

    WorkMsgs enthalten einen Zeitstempel und werden sortiert nach diesem Zeitstempel an den FSM-Akteur gesendet. Wenn der FSM-Akteur WorkMsgs verarbeitet, verwirft er WorkMsgs, die älter als die vorherige WorkMsg sind. Wenn diese also neu angeordnet werden, gehen Daten verloren.

    Ohne den PriorityExecutorBasedEventDrivenDispatcher werden WorkMsgs nicht neu angeordnet, aber die Prioritäten in der obigen Liste sind nicht erfüllt.

    Wie kann ich die Prioritäten in der obigen Liste beibehalten und gleichzeitig verhindern, dass Nachrichten mit derselben Priorität neu angeordnet werden?

War es hilfreich?

Lösung

Ein priorisierender Proxy-Akteur kann Nachrichten priorisieren, die an Ihren Worker-Akteur gesendet werden sollen.Sie müssen die eingehenden Nachrichten sortieren und speichern sowie die Priorisierungslogik implementieren.Der Mitarbeiter muss außerdem nach jeder Nachricht auf den Proxy antworten, um ihn darüber zu informieren, dass er für weitere Arbeiten bereit ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top