2008-10-08 10 views
13

Estoy buscando un mecanismo de manejo de eventos bastante rápido en Java para generar y manejar eventos en diferentes JVM que se ejecutan en diferentes hosts.Mecanismo distribuido de manejo de eventos para Java

Para el manejo de eventos en varios subprocesos 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 los 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.

+0

Un poco más de detalles no dolería; por ejemplo, ¿se distribuirá en una red local o remotamente? ¿Cliente-servidor o peer-to-peer? – Viruzzo

Respuesta

3

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

1

Cualquiera que sea la herramienta que use, recomiendo ocultar las API de middleware de la lógica de su aplicación. Por ejemplo, si usó el Apache Camel approach to hiding middleware, 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 potente con el largest most active community behind it tanto dentro Apache y outside it.

6

Hazelcast Tema es una solución de mensajería de pub 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 es compatible con eventos en la cola distribuida, mapa, conjunto, lista. Todos los eventos están ordenados también.

Saludos,

-talip

http://www.hazelcast.com

3

para el evento de procesamiento distribuido que podría utilizar Esper .Se podría procesar hasta 500 000 eventos/s en un hardware basado en Intel a 2 GHz CPU dual.Es muy estable porque muchos bancos usan esta solución. Admite el adaptador de entrada y salida JMS basado en plantillas Spring JMS. De modo que podría usar cualquier implementación JMS para el procesamiento de eventos, es decir, ActiveMQ.

0

El Avis event router 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 gran volumen.

1

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.

0

Debe implementar Observer Design pattern 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 desencadena la publicación de un documento en una colección con el tope y el hilo del observador lo espera utilizando un cursor de tailable. Si no entendió lo que he dicho antes, necesita repasar su MongoDB y java skills

Cuestiones relacionadas