E' possibile fare un Actor
attendere x quantità di secondi per ricevere qualsiasi messaggio, e se viene ricevuto un messaggio, elaborarlo come al solito, altrimenti invia un messaggio ad un altro Actor
(predefinito nel costruttore)?Akka Actor - aspetta un po 'di tempo per aspettare un messaggio, altrimenti invia un messaggio
risposta
Sì, se si desidera attendere qualsiasi messaggio, è sufficiente impostare un ReceiveTimeout: http://doc.akka.io/docs/akka/current/scala/actors.html#receive-timeout
(La documentazione è leggermente fuorviante qui, è possibile impostare il receiveTimeout dopo ogni messaggio anche)
È possibile, dare un'occhiata a Akka Actor "ask" and "Await" with TimeoutException. Ma tieni presente che bloccare un attore è una pessima idea, perché durante quel periodo l'attore non può gestire nessun altro messaggio. Inoltre blocca un thread di elaborazione Akka.
Un approccio migliore consiste nell'inviare un messaggio (incendio e dimenticare) e pianificare un evento di timeout utilizzando Akka scheduler. Quando arriva la risposta, cancella quell'evento o imposta un contrassegno in modo che non si inneschi se la risposta arriva effettivamente in tempo.
Potrebbe essere eccessivo, ma è possibile controllare il tratto Finite State Machine (FSM).
import akka._
import actor._
import util._
import duration._
import Impatient._
object Impatient {
sealed trait State
case object WaitingForMessage extends State
case object MessageReceived extends State
case object TimeoutExpired extends State
sealed trait Data
case object Unitialized extends Data
// In
case object Message
}
class Impatient(receiver: ActorRef) extends Actor with FSM[State, Data] {
startWith(WaitingForMessage, Unitialized)
when(WaitingForMessage, stateTimeout = 3 seconds) {
case Event(StateTimeout, data) => goto(TimeoutExpired) using data // data is usually modified here
case Event(Message, data) => goto(MessageReceived) using data // data is usually modified here
}
onTransition {
case WaitingForMessage -> MessageReceived => stateData match {
case data => log.info("Received message: " + data)
}
case WaitingForMessage -> TimeoutExpired => receiver ! TimeoutExpired
}
when(MessageReceived) {
case _ => stay
}
when(TimeoutExpired) {
case _ => stay
}
initialize
}
Qui è in azione:
object Main extends App {
import akka._
import actor._
import Impatient._
val system = ActorSystem("System")
val receiver = system.actorOf(Props(new Actor with ActorLogging {
def receive = {
case TimeoutExpired => log.warning("Timeout expired")
}
}))
val impatient = system.actorOf(Props(new Impatient(receiver)), name = "Impatient")
impatient ! Message
val impatient2 = system.actorOf(Props(new Impatient(receiver)), name = "Impatient2")
Thread.sleep(4000)
impatient2 ! Message
system.shutdown()
}
- 1. Akka: Invia un messaggio futuro ad un attore
- 2. Come testare un attore Akka che invia un messaggio a se stesso, senza usare Thread.sleep
- 3. Come si verifica un attore Akka che invia un messaggio a un altro attore?
- 4. Invia messaggio Windows a un servizio Windows
- 5. In Akka, posso spoofare un messaggio da un altro attore?
- 6. Ratchet WebSocket - invia un messaggio immediatamente
- 7. Messaggio di errore con Scala AKKA Attore
- 8. Git: Invia a un repository remoto con un messaggio
- 9. Akka - come verificare per quanto tempo un messaggio era in arrivo?
- 10. Invia un messaggio a un amico, mi chiedo API Javascript
- 11. Akka invia un messaggio differito a self non può trovare implicita ExecutionContext
- 12. SignalR - Invia messaggio OnConnected
- 13. Informare il programma Ruby per attendere un po 'di tempo
- 14. Invia Mela servizio di notifica Un messaggio Con Python
- 15. RabbitMQ Attendere un messaggio con un timeout
- 16. Invia un messaggio signalr da server a tutti i clienti
- 17. Play Framework 2.0 pianifica un Akka Actor all'avvio dal server
- 18. Corpo del messaggio su un messaggio 404
- 19. AKKA Actor e DataBase Operazione
- 20. Come limitare un flusso Akka per eseguire e inviare un messaggio solo una volta al secondo?
- 21. Invia un messaggio xmpp utilizzando una libreria python
- 22. Invia un messaggio agli amici inbox in facebook
- 23. IBM MQ pubblica/sottoscrivi invia messaggio a un sottoscrittore
- 24. chrome.runtime.sendMessage nello script contenuti non invia un messaggio
- 25. Invia richiesta messaggio in Scrapy
- 26. Android - Invia messaggio Telegram a un numero specifico
- 27. Tempo un po 'di ciclo python
- 28. Gancio post-commit SVN che invia un messaggio al client
- 29. Annulla sessione dopo un po 'di tempo
- 30. Telegram C# esempio invia messaggio
+1 per il programma soluzione. – paradigmatic