2008-10-08 90 views
13

我正在尋找一種合理快速的Java事件處理機制來生成和處理跨不同主機上運行的不同JVM的事件。Java的分佈式事件處理機制

對於事件在單個JVM在多個線程處理,我發現了一些很好的候選人像Jetlang。但是在尋找分佈式等價物時,我找不到任何輕量級提供良好性能的東西。

有誰知道符合該法案的任何實現的?

編輯: 把數字表示性能是有點困難。但是,例如,如果您使用事件實施心跳機制,並且心跳間隔爲5秒,則心跳接收器應在一秒鐘或兩秒內收到發送的心跳。

通常,輕量級實現會提供良好的性能。涉及Web服務器或任何需要強大硬件(絕對不是輕量級)以提供良好性能的中央集線器的事件處理機制並不是我所期待的。

+0

多一點細節不會傷害;例如,它將分佈在本地網絡上還是遠程分發?客戶端服務器還是點對點? – Viruzzo 2012-01-11 13:22:23

回答

3

根據你的使用情況,Terracotta可能是一個很好的選擇。

1

哪種工具,你用我建議你從你的應用程序邏輯隱藏中間件API。例如,如果您使用Apache Camel approach to hiding middleware,那麼您可以根據自己的具體要求,輕鬆地從AMQP切換到SEDA到JMS,再到ActiveMQ切換到JavaSpaces到您自己的定製MINA傳輸。

如果你想使用一個消息代理我建議使用Apache ActiveMQ這與largest most active community behind it內外Apache和outside it最流行和最強大的開源消息代理。

6

Hazelcast主題是一個分佈式的發佈 - 訂閱消息解決方案。

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還支持分佈式隊列,地圖,設置,列表上的事件。所有的事件都是有序的。

問候,

-talip

http://www.hazelcast.com

3

對於分佈式事件處理,你可以使用Esper。它可以處理高達50萬事件/ s的雙CPU 2GHz的英特爾基於硬件。這很穩定,因爲許多銀行都使用這種解決方案。它支持基於Spring JMS模板的JMS輸入和輸出適配器。因此,您可以使用任何JMS實現進行事件處理,即ActiveMQ

0

Avis event router可能適合您的需求。它對於接近實時的事件傳遞來說足夠快,例如發送用於遠程鼠標控制的鼠標事件(我們每天使用它的應用程序)。

Avis還被用於聊天,虛擬存在和智能房間自動化,其中通常有10-20臺計算機通過基於Avis的消息總線進行通信。其商業表弟(Mantara Elvin)用於大批量商業貿易活動的處理。

1

看看akka(http://akka.io/)。它爲Java和scala API提供了一個與erlang同樣的分佈式actor模型。

0

您需要實現Observer Design pattern用於java中的分佈式事件處理。我正在使用事件流使用MongoDB上限收集和觀察員來實現這一點。

您可以創建一個架構,在該架構中,您的觸發器在封頂的集合中發佈文檔,並且觀察者線程使用可放大的遊標等待它。 如果你不明白我在上面說過什麼,你需要刷你的MongoDBjava skills