2015-06-01 12 views
5

zu verwenden Ich versuche zu verstehen, wann und wo die verschiedenen built-in Akka mailboxes sowie wenn es angemessen ist, eigene zu rollen. Aber nirgendwo auf dieser Seite erklärt es, was eine "begrenzte Mailbox" tatsächlich ist, oder wie es sich anders verhält als eine unbegrenzte Mailbox. Außerdem kategorisiert diese Seite Postfächer wie "blockiert" vs "nicht blockierende". Und während ich eine klare Vorstellung davon habe, was sie damit meinen (eine Nachricht kann an ein Postfach gesendet werden, wenn das Postfach nicht zuerst geleert wird), bin ich nicht 100% sicher, dass ich das verstehe. Da ich keine Ahnung habe, was die Dokumente bedeuten, wenn sie ein Postfach als eingeschränkt oder blockierend kategorisieren, ist es schwierig für mich zu sagen, wann ich jeden Typ verwenden soll.Wann verschiedene Akka Mailbox-Typen

Es scheint auch, dass es das Standardverhalten von Akka ist, das Postfach eines Akteurs zu löschen, wenn dieser Akteur neu gestartet wird. Ich möchte das verhindern, aber nicht sicher, ob die Lösung darin besteht, einen dieser eingebauten Mailbox-Typen zu verwenden (auf dieser Seite wird keine Erwähnung der Persistenz von Nachrichten erwähnt) oder irgendwie persistente Akteure zu verwenden, um eine solche Verlustfreiheit zu erreichen.

Antwort

6

Erstens, wenn ein Akteur abstürzt und neu gestartet wird, verlieren Sie nur die aktuelle Nachricht, die verarbeitet wurde, und nicht das gesamte Postfach.

A begrenzt Mailbox eine Begrenzung für die Anzahl der Nachrichten hat, kann es die Warteschlange gestellt hat, bevor er beginnt, den Absender blockiert und nicht so dass das Element, wenn die Warteschlange nicht nach unten gehen, während der Sender auf ein Element zu setzen versucht. Wenn Sie Bedenken hinsichtlich des Gedächtnisses haben und mit einem möglichen Nachrichtenverlust umgehen können, möchten Sie vielleicht etwas ähnliches. Ein unbegrenztes Postfach hat keine Kapazitätsbeschränkung, sodass Speicherprobleme auftreten können, wenn es überflutet wird.

Ob es beschränkt ist oder nicht, hängt davon ab, ob es blockiert oder nicht. Das Blockieren ist im Allgemeinen nicht sehr leistungsfähig und sollte vermieden werden, wenn die Situation kein eingeschränktes Postfach erfordert. Aus diesem Grund ist das Standardpostfach unbegrenzt. es wird viel bessere Leistung erbringen als ein begrenztes Gegenstück.

Die einzige Mailbox ohne Verbraucher ist wahrscheinlich die schnellste, da sie so optimiert ist, dass nur ein Verbraucher die Dinge aus der Warteschlange nimmt. Dies bedeutet, dass Sie keinen Dispatcher verwenden können, der einer Akteursinstanz erlaubt, Elemente aus einem anderen Akteurinstanzenpostfach zu stehlen (Arbeitsverteilung/Stehlen), aber wenn Sie sich nicht darum kümmern, dann könnte dieses Postfach die beste Leistung sein.

Die prioritätsbasierten Postfächer ermöglichen die Bereitstellung von Code, der die Platzierung in der Warteschlange abhängig von einigen Attributen der Nachrichten selbst variieren lässt. Auf diese Weise können Sie die Priorität der Nachrichten selbst festlegen und Elemente mit höherer Priorität unabhängig von den normalen FIFO-Regeln an den Anfang der Warteschlange verschieben.