tutorial meaning kafka israel ciudad scala akka

scala - meaning - Los malentendidos de Akka se vuelven/inoportunos



akka vs kafka (2)

El siguiente código:

class HotSwapActor extends Actor { import context._ def angry: PartialFunction[Any, Unit] = { case "foo" => sender ! "I am already angry!" case "bar" => become(happy) } def happy: PartialFunction[Any, Unit] = { case "bar" => sender ! "I am already happy :-)"; unbecome case "foo" => become(angry) } def receive = { case "foo" => become(angry) case "bar" => become(happy) } } class OtherActor extends Actor { val system = ActorSystem() val actor = system.actorOf(Props[HotSwapActor]) def receive = { case "start" => actor ! "foo" actor ! "bar" actor ! "bar" actor ! "foo" case a @ _ => println(a) } } object HotSwapMain extends App { val system = ActorSystem() val actor = system.actorOf(Props[OtherActor]) actor ! "start" }

Tiene la salida:

Ya estoy feliz :-)

Pero no podría ser

Ya estoy feliz :-) ¡Ya estoy enojado!

¿O me estoy perdiendo la semántica de impropio en impecable en el caso de la barra de la feliz PartialFunction?


Así es como es el flujo.

  1. Msg "foo" enviado -> receive recibe el mensaje. angry convierte en la función de recibir. Cualquier siguiente mensaje será enviado a angry
  2. Mensaje "barra" enviado -> mensaje angry recibe. happy convierte en la función de recibir. Cualquier próximo mensaje será enviado a happy
  3. Mensaje "barra" enviado -> happy recibe el mensaje. Respondió I am already happy :-) mensaje. Y luego se unbecomes . Según api para todas las llamadas previas a context.become , discardOld se estableció como predeterminado en true. Ahora, después de reemplazarse, no queda nada para convertirse en el próximo receptor. Toma el predeterminado, es decir, receive como receptor.

  4. Msg "foo" enviado -> receive recibe el mensaje. angry convierte en la función de recibir. Cualquier siguiente mensaje será enviado a angry


se convierte en un segundo parámetro opcional ''discardOld''. Por defecto esto es cierto. Para que la pila no se mantenga. Si desea que se mantenga la pila y obtenga el resultado como: "Ya estoy contento :-) ¡Ya estoy enojado!", Pase el argumento discardOld = false a su función de convertido.