2012-08-05 14 views
16

Estoy aprendiendo Akka y estoy tratando de averiguar cómo conseguir que los actores hablen entre sí (llamémoslos A y B). No es un escenario de solicitud/respuesta, A y B se envían mensajes entre sí en cualquier momento.Akka actorPara vs pasando un ActorRef

Por el momento tengo dos actores hermanos que transmiten mensajes en ambas direcciones el uno al otro. Ambos se crean directamente en el ActorSystem. Inicialmente pasé el ActorRef de A en el constructor de B. Pero no puedo pasar el ActorRef de B al constructor de A porque aún no existe, es decir, no puedo usar este método para las referencias circulares.

He estado leyendo acerca de actorFor y esto me permitiría buscar un actor usando su ruta. Sin embargo, no me siento cómodo con esta configuración, porque si la ruta cambia, no será capturada por el compilador.

Otra alternativa, teniendo en cuenta cada actor tiene acceso a la misma de los padres, es para pasar los mensajes de A y B al padre y luego tener la matriz pasar el mensaje de vuelta a A y B. Pero esto une al padre con los tipos de mensajes que se transmiten de un lado a otro.

¿Qué estrategias utilizan las personas para hacer que los actores se conozcan entre sí? ¿Estoy siendo muy cauteloso al buscar actores por el camino?

+0

¿Ha intentado utilizar 'lazy val's al crear instancias de sus' ActorRef's? Me imagino que esto ayudaría a resolver la dependencia circular. Asumiendo que usas Scala, por supuesto ... – agilesteel

+0

Acabo de darle una oportunidad y funciona. No sabía que hace referencia a un vago val antes de que se defina - ¡cosas locas! Gracias por el consejo. Todavía estaré interesado en saber cómo se siente la gente acerca de pasar ActorRefs vs paths. – Geoff

+0

Asegúrate de haber leído http://doc.akka.io/docs/akka/2.0.2/general/addressing.html. – sourcedelica

Respuesta

11

En mi humilde opinión que tienen tres estrategias, que la lista de I Del más cerca de su problema (pero también para mí el peor patrón, lo siento)

Estrategia 1: crear el actor A y el actor B, pasar actorRef A al constructor del actor B. Su ping-pong comenzará desde el actor B enviando un mensaje al actor A, y el actor A simplemente puede responder usando la referencia del remitente. (O al revés)


Estrategia 2: se crea una capa de la aplicación que se encarga de la nomenclatura: se asigna el nombre en la creación del actor, así como al consultar. Esto centraliza el problema en un solo punto.


Estrategia 3: uno se pregunta si dos hermanos actores que juegan ping-pong no están reemplazando a un mayor jerarquía mejor, el actor modular donde básicamente cada actor comunicarse sólo con su padre y sus hijos y no tiene conocimiento acerca de sus hermanos.

+3

La estrategia 3 suena más sensata. Estaba un poco preocupado de que los padres terminarían haciendo mucho cableado, pero creo que está bien porque el trabajo de los padres es coordinar a sus hijos (además, simplemente reenviar mensajes no es mucho trabajo). – Geoff

Cuestiones relacionadas