2008-10-08 116 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