2008-10-08 38 views
13

Ich bin auf der Suche nach einem einigermaßen schnellen Event-Handling-Mechanismus in Java, um Ereignisse über verschiedene JVMs zu generieren und zu behandeln, die auf verschiedenen Hosts laufen.Distributed-Event-Handling-Mechanismus für Java

Für die Ereignisbehandlung über mehrere Threads in einer einzigen JVM habe ich einige gute Kandidaten wie Jetlang gefunden. Aber auf der Suche nach einem verteilten Gegenstück konnte ich nichts finden, das leicht genug war, um eine gute Leistung zu bieten.

Kennt jemand irgendwelche Implementierungen, die die Rechnung passen?

Bearbeiten: Zahlen zu zeigen, Leistung ist ein bisschen schwierig. Wenn Sie jedoch beispielsweise einen Heartbeat-Mechanismus mit Ereignissen implementieren und das Heartbeat-Intervall 5 Sekunden beträgt, sollte der Heartbeat-Empfänger einen gesendeten Heartbeat innerhalb von ein oder zwei Sekunden erhalten.

Im Allgemeinen bietet eine leichte Implementierung eine gute Leistung. Ein Ereignisbehandlungsmechanismus, der einen Webserver oder irgendeinen zentralisierten Hub umfasst, der leistungsfähige Hardware (definitiv nicht leicht) für eine gute Leistung benötigt, ist nicht das, wonach ich suche.

+0

auffrischen Ein wenig mehr Details würde nicht weh tun; Zum Beispiel, wird es in einem lokalen Netzwerk oder remote verteilt werden? Client-Server oder Peer-to-Peer? – Viruzzo

Antwort

3

Abhängig von Ihrem Anwendungsfall kann Terracotta eine ausgezeichnete Wahl sein.

1

Welches Tool Sie auch verwenden, ich würde empfehlen, die Middleware-APIs aus Ihrer Anwendungslogik auszublenden. Wenn Sie beispielsweise Apache Camel approach to hiding middleware verwenden, können Sie problemlos von AMQP zu SEDA zu JMS zu ActiveMQ zu JavaSpaces zu Ihrem eigenen benutzerdefinierten MINA-Transport wechseln, der auf Ihren genauen Anforderungen basiert.

Wenn Sie einen Nachrichten-Broker verwenden möchten würde mich mit Apache ActiveMQ empfehlen, das ist der beliebteste und leistungsfähiger Open-Source-Message-Broker mit den largest most active community behind it sowohl innerhalb als Apache und outside it.

6

Hazelcast Thema ist eine verteilte Pub-Sub-Messaging-Lösung.

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 unterstützt auch Ereignisse in verteilten Warteschlangen, Karten, Sets und Listen. Alle Ereignisse sind auch bestellt.

Grüße,

-talip

http://www.hazelcast.com

3

Für verteilte Ereignisverarbeitung Sie Esper .Es könnte auf einem Dual-CPU mit 2 GHz Intel-basierte Hardware verarbeiten bis zu 500 000 Ereignis/s nutzen könnten.Es ist sehr stabil, weil viele Banken diese Lösung verwenden. Es unterstützt JMS-Eingabe- und Ausgabeadapter basierend auf Spring JMS-Vorlagen. Sie können also jede JMS-Implementierung für die Ereignisverarbeitung verwenden, d. H. ActiveMQ.

0

Die Avis event router könnte für Ihre Bedürfnisse geeignet sein. Es ist schnell genug für die Bereitstellung von Ereignissen in der Nähe von Echtzeit, z. B. das Senden von Mausereignissen für die Remote-Maussteuerung (eine Anwendung, für die wir es täglich verwenden).

Avis wird auch für Chat, virtuelle Präsenz und intelligente Raumautomation verwendet, wo typischerweise 10-20 Computer über einen Avis-basierten Messaging-Bus kommunizieren. Sein kommerzieller Cousin (Mantara Elvin) wird für die kommerzielle Verarbeitung von Event-Großveranstaltungen verwendet.

1

Werfen Sie einen Blick auf akka (http://akka.io/). Es bietet ein verteiltes Akteurmodell in der gleichen Art wie Erlang für die JVM mit Java- und Scala-APIs.

0

Sie müssen Observer Design pattern für verteilte Ereignisbehandlung in Java implementieren. Ich verwende Ereignis-Streaming mit MongoDB Capped Collection und Observer, um dies zu erreichen.

Sie können eine Architektur erstellen, in der ein Dokument in der Capped-Sammlung veröffentlicht wird, und Ihr Beobachter-Thread wartet mit einem tailable-Cursor darauf. Wenn Sie nicht verstanden haben, was ich oben gesagt habe, müssen Sie Ihre MongoDB und java skills