Nach dem, was ich gesammelt habe, wird das "Ask" -Muster als schlechte Praxis angesehen und sollte vermieden werden. Das empfohlene Muster ist stattdessen das Modell "Akteur pro Anfrage". Für mich ergibt das aber keinen Sinn, da das "ask" -Muster genau das tut - es erzeugt pro Anfrage einen leichten Akteur. Warum wird das dann als schlecht angesehen, besonders wenn Futures viel kompostierbarer sind und in der Lage sind, den Zusammentrag von mehreren Send / Receivern eleganter zu handhaben?
Von Akka Dokumente :
"Es gibt Leistungseinbußen bei der Verwendung von ask, da etwas benötigt wird Um den Überblick zu behalten, wann es abläuft, muss es etwas geben überbrückt ein Versprechen in ein ActorRef und es muss auch erreichbar sein durch Remoting. Also immer lieber für Leistung sprechen und nur fragen wenn du musst. "
Aber manchmal möchten Sie eine Nachricht von außerhalb eines Akteurs senden, in diesem Fall können Sie ask
verwenden. Die Verwendung von ask
garantiert, dass Sie innerhalb des angegebenen Zeitlimits eine Antwort erhalten, und manchmal ist es das, was Sie wollen. Wenn Sie jedoch ask
pattern verwenden, sollten Sie sich eine Frage stellen, ob Sie stattdessen Future
s verwenden könnten.
Es gibt einen Platz für ask
, aber es sollte aufgrund der oben genannten Gründe sehr begrenzt verwendet werden.
Sie müssen keinen Schauspieler pro Anfrage verwenden. Manche Schauspieler sollen langlebig sein, andere nicht. Wenn ein Akteur eine potenziell gefährliche oder blockierende Operation durchführt, möchten Sie möglicherweise eine pro Anfrage erstellen. Was auch immer zu Ihrer Anwendungslogik passt.