library google eventbus java event-handling distributed

google - Mecanismo distribuido de manejo de eventos para Java



guava java library (10)

AMQP (Advanced Message Queuing Protocol) - más detalles: http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol es probablemente lo que está buscando.

Es utilizado por las compañías de servicios financieros por sus requisitos de alto rendimiento. Apache tiene una implementación en marcha. Http://cwiki.apache.org/qpid/

OpenAMQ - http://www.openamq.org/ es una IMPLEMENTACIÓN DE REFERENCIA más antigua.

Estoy buscando un mecanismo de manejo de eventos razonablemente rápido en Java para generar y gestionar eventos en diferentes JVM que se ejecutan en diferentes hosts.

Para el manejo de eventos a través de múltiples hilos en una sola JVM, encontré algunos buenos candidatos como Jetlang. Pero en mi búsqueda de un equivalente distribuido, no pude encontrar nada que fuera lo suficientemente ligero como para ofrecer un buen rendimiento.

¿Alguien sabe de alguna implementación que se ajuste a la factura?

Editar: Poner números para indicar el rendimiento es un poco difícil. Pero, por ejemplo, si implementa un mecanismo de latido utilizando eventos y el intervalo de latido es de 5 segundos, el receptor de latidos debería recibir un latido cardíaco dentro de, digamos, uno o dos segundos.

En general, una implementación ligera proporciona un buen rendimiento. No es lo que estoy buscando un mecanismo de manejo de eventos que involucre un servidor web o cualquier tipo de concentrador centralizado que requiera hardware potente (definitivamente no liviano) para proporcionar un buen rendimiento.


Cualquiera que sea la herramienta que use, le recomiendo que oculte las API de middleware de la lógica de su aplicación. Por ejemplo, si utilizó el enfoque de Apache Camel para ocultar el middleware , entonces podría cambiar fácilmente de AMQP a SEDA a JMS a ActiveMQ a JavaSpaces a su propio transporte MINA personalizado en función de sus requisitos exactos.

Si desea utilizar un intermediario de mensajes, le recomiendo usar Apache ActiveMQ, que es el intermediario de mensajes de código abierto más popular y poderoso, con la comunidad más grande y activa detrás de él, tanto dentro de Apache como fuera de él .


Dependiendo de su caso de uso, Terracotta puede ser una excelente opción.



Para el procesamiento de eventos distribuidos, puede usar Esper . Podría procesar hasta 500 000 eventos en un hardware basado en Intel de doble CPU a 2 GHz. Es muy estable porque muchos bancos usan esta solución. Admite el adaptador de entrada y salida JMS basado en plantillas Spring JMS. Entonces, podría usar cualquier implementación JMS para el procesamiento de eventos, es decir, ActiveMQ .


Hazelcast Topic es una solución de mensajería pub-sub distribuida.

public class Sample implements MessageListener { public static void main(String[] args) { Sample sample = new Sample(); Topic topic = Hazelcast.getTopic ("default"); topic.addMessageListener(sample); topic.publish ("my-message-object"); } public void onMessage(Object msg) { System.out.println("Message received = " + msg); } }

Hazelcast también admite eventos en cola distribuida, mapa, conjunto, lista. Todos los eventos están ordenados también.

Saludos,

-talip

http://www.hazelcast.com


El enrutador de eventos Avis puede ser adecuado para sus necesidades. Es lo suficientemente rápido para la entrega de eventos en tiempo casi real, como el envío de eventos de mouse para el control remoto del mouse (una aplicación que usamos diariamente).

Avis también se utiliza para el chat, la presencia virtual y la automatización de salas inteligentes, donde normalmente 10-20 computadoras se comunican a través de un bus de mensajería basado en Avis. Su primo comercial (Mantara Elvin) se utiliza para el procesamiento de eventos de comercio comercial de alto volumen.


ZeroMQ - http://www.zeromq.org/

Aunque se trata de una capa de transporte, se puede personalizar para el manejo de eventos.


Eche un vistazo a akka (http://akka.io/). Ofrece un modelo de actor distribuido en la misma línea que erlang para la JVM con las API java y scala.


Debe implementar el patrón de diseño del observador para el manejo distribuido de eventos en java. Estoy utilizando el evento Streaming usando MongoDB capped collection y Observers para lograr esto.

Puede crear una arquitectura en la que su desencadenador publique un documento en una colección con el tope y su hilo de observación lo espere utilizando un cursor de tailable. Si no entendiste lo que dije antes, necesitas mejorar tus habilidades de MongoDB y Java