Akka Actor - warten Sie einige Zeit, um eine Nachricht zu erwarten, sonst senden Sie eine Nachricht aus

8

Ist es möglich, ein Actor auf X Sekunden zu warten, um eine Nachricht zu empfangen, und wenn eine Nachricht empfangen wird, verarbeiten Sie sie wie gewohnt, andernfalls senden Sie eine Nachricht an ein anderes Actor (im Voraus bestimmt in der Konstruktor)?

    
adelbertc 05.10.2012, 06:34
quelle

3 Antworten

3

Ja, wenn Sie auf any warten möchten, legen Sie einfach ein receiveTimeout fest: Ссылка

(Die Dokumentation ist hier leicht irreführend, Sie können das receiveTimeout auch nach jeder Nachricht einstellen)

    
Viktor Klang 05.10.2012, 21:07
quelle
16

Es ist möglich, werfen Sie einen Blick auf Akka Actor "Fragen" und "Warten" mit TimeoutException . Aber denken Sie daran, dass das Blockieren innerhalb eines Schauspielers eine sehr schlechte Idee ist, da der Schauspieler während dieser Zeit keine anderen Nachrichten verarbeiten kann. Außerdem blockiert es einen Akka-Verarbeitungs-Thread.

Ein besserer Ansatz besteht darin, eine Nachricht zu senden ( fire and forget ) und ein Timeout-Ereignis mit Akka Scheduler . Wenn die Antwort eintrifft, brechen Sie dieses Ereignis ab oder setzen Sie ein Flag, damit es nicht ausgelöst wird, wenn die Antwort tatsächlich pünktlich kam.

    
Tomasz Nurkiewicz 05.10.2012 06:46
quelle
4

Könnte ein Overkill sein, aber Sie können sich den Endlichen Automaten (FSM) ansehen

%Vor%

Hier ist es in Aktion:

%Vor%     
agilesteel 05.10.2012 07:25
quelle

Tags und Links