2012-04-22 19 views

Respuesta

12

El mejor lugar para comenzar es un great Akka official documentation. Creo que el producto/framework más cercano a Akka es . I guess (No he usado Play framework) Akka se usa allí para implementar Comet y otros procesamientos asincrónicos.

es algo similar en ideas (infraestructura para enviar mensajes), tenga en cuenta que RabbitMQ incluso está escrito en , pero tienen casos de uso ligeramente diferentes. Diría que mientras RabbitMQ se enfoca en el envío de mensajes, Akka se trata más de actores (receptores y remitentes de mensajes).

+17

RabbitMQ es un intermediario de AMQP, es decir, un transporte. Akka es un conjunto de herramientas de simultaneidad/escalabilidad/tolerancia a fallas. Puede usar AMQP como buzones Akka Actor o como transporte remoto Akka. –

+0

Gracias por la respuesta, solo para clérigo, si tengo múltiples aplicaciones java, quiero que se comuniquen, necesitaré rabbitmq. Por ejemplo, 2 juegos separados 2 aplicaciones, máquinas separadas, Akka no puede ser el marco de unión, necesitaré jms o rabbitmq, ¿es correcto? –

+5

Puede "unir" JVM utilizando actores remotos, vienen con un transporte predeterminado que se basa en Netty. –

7

El mejor consejo que puedo ofrecer, ya que también realicé el mismo proceso de pensamiento cuando Play 2.0 se unió a Typesafe y comencé a utilizar Akka más, es buscar "Actor modelo".

Wikipedia es un gran recurso - http://en.wikipedia.org/wiki/Actor_model. Tiene una lista de lenguajes de programación que pueden admitir el modelo de actor, y también tiene una lista de marcos (incluido Akka) que se basan en el modelo Actor.

En pocas palabras, el modelo Actor se basa en el concepto de actores en un modelo de computación concurrente. Los actores no necesariamente significan la transmisión de mensajes, pero los casos de uso más comunes tendrán a los actores transmitiendo mensajes (que es donde aparecerán las similitudes con rabbitMQ).

+8

Pequeña corrección con gran impacto: los actores SOLO pueden recibir mensajes, esa es la esencia del concepto Los actores son un modelo de computación, mientras que rabbitMQ es un medio para pasar mensajes, por lo tanto, viven en diferentes niveles de abstracción. –

15

Yo uso RabbitMQ + Spring AMQP + Guava EventBus para registrar automáticamente mensajeros tipo Actor usando Guava's EventBus for pattern matching los mensajes recibidos.

La similitud con Spring AMQP y Akka es asombrosa. Spring AMQP's SimpleMessageListenerContainer + MessageListener es prácticamente equivalente a un Actor.

Sin embargo, para todos los efectos RabbitMQ es más poderosa de Akka, ya que tiene muchos clientes implementaciones en diferentes idiomas, proporciona persistencia (colas duraderos), enrutamiento topológica y algoritmos de QoS enchufables .

Dicho esto Akka es mucho más conveniente y, en teoría, Akka puede hacer todo lo anterior y algunas personas han escrito extensiones, pero la mayoría solo usa Akka y luego hace que Akka entregue los mensajes en RabbitMQ. Además, el contenedor Spring AMQP SimpleMessageListener es bastante pesado y no está claro qué pasaría si crearas un par de millones de ellos.

En retrospectiva, consideraría usar Akka para RabbbitMQ en lugar de Spring AMQP para proyectos futuros.

+1

Akka admite buzones duraderos que son similares a las colas persistentes que proporciona RabbitMQ. –

+1

Sí, lo descubrí recientemente. Mi principal problema con Akka es que si usas Java para interactuar con él, parece que tienes que hacer mucho casting. La otra cosa es que hay clientes amqp en otros idiomas, como Python. –

+0

Según http://letitcrash.com/post/29988753572/akka-amqp-proxies, Akka puede usar AMQP como medio de transporte. AMQP es un protocolo estándar de nivel de cable, por lo que no impide que Akka o cualquier lenguaje de programación o entorno operativo lo use como medio de transporte para comunicarse con clientes escritos en otros lenguajes de programación. –

1

Akka es un conjunto de herramientas y de tiempo de ejecución para la construcción de concurrentes & distribuidos sistemas. Para lograr esto, Akka usa el modelo Actor. Si usted está buscando una alternativa para Akka, creo que no se puede encontrar una solución completa como Akka, porque Akka tiene varias características que le permiten desarrollar robusta concurrente sistema & distribuido:

  • Akka el actor
  • Actor enrutamiento, supervisión y control de
  • asíncrona y sin bloqueo de mensajes
  • Akka Cluster (para la gestión de clusters)
  • Akka persistencia (para la implementación de abastecimiento de eventos, el actor persistencia y Al-Menos Una vez que la mensajería de entrega)
  • Akka E/S (para TCP & comunicación UDP)
  • Akka HTTP (para la comunicación HTTP como cliente o servidor)
  • Akka corriente (para el procesamiento de flujo)
  • ...

pero sugiero a echar un vistazo a Erlang/OTP y Quasar.

+0

En cuanto a una comparación con Quasar, también sugiero echar un vistazo a http://blog.paralleluniverse.co/2015/05/21/quasar-vs-akka/. Tenga en cuenta que Galaxy todavía no está listo para la producción (pero pronto lo hará), pero por otro lado los Quasar Actors son tan similares a los de Erlang (y por lo tanto tan sencillos) que la integración con prácticamente cualquier solución de mensajería es extremadamente fácil y pronto escribe más sobre eso. DESCARGO DE RESPONSABILIDAD: Formo parte del equipo de Quasar. – circlespainter

1

http://scalecube.io es una baja latencia microservicios lib. una solución completa que le permite desarrollar un sistema distribuido robusto simultáneo &.

Me gusta Akka: - se basa en el protocolo de chismes y nado. - su mensaje está basado en protobuf (dúplex completo). - es para JVM. - baja latencia y aproximadamente ~ 6 veces más rápido. - usa RxJava probado para ser más rápido que las transmisiones de akka.

A diferencia de Akka: - es menos obvio - no es un marco. - no forzando el patrón de actor como patrón holístico.

+0

Parece que no tiene nada para la persistencia. Tal vez, diferente bestia? – user2108278

Cuestiones relacionadas