Java的分布式事件处理机制

时间:2008-10-08 03:26:48

标签: java event-handling distributed

我正在寻找一种合理快速的Java事件处理机制来生成和处理在不同主机上运行的不同JVM上的事件。

对于单个JVM中多个线程的事件处理,我发现了一些像Jetlang这样的好候选者。但是在我搜索分布式的等价物时,我发现任何轻量级的东西都不能提供良好的性能。

有没有人知道任何适合该法案的实施?

修改 使用数字来表示性能有点困难。但是,例如,如果使用事件实现心跳机制并且心跳间隔为5秒,心跳接收器应该在一两秒钟内接收发送的心跳。

通常,轻量级实现提供了良好的性能。涉及Web服务器或任何类型的集中式集线器的事件处理机制需要强大的硬件(绝对不是轻量级)以提供良好的性能,这不是我正在寻找的。

10 个答案:

答案 0 :(得分:8)

Hazelcast主题是一个分布式的pub-sub消息传递解决方案。

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

答案 1 :(得分:4)

根据您的使用情况,Terracotta可能是一个很好的选择。

答案 2 :(得分:3)

AMQP(高级消息队列协议) - 更多详细信息: http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol可能就是你要找的东西。

金融服务公司将其用于高性能要求 - apache已实施 - http://cwiki.apache.org/qpid/

OpenAMQ - http://www.openamq.org/是较早的参考实现。

答案 3 :(得分:3)

对于分布式事件处理,您可以使用Esper。它可以在双CPU 2GHz基于Intel的硬件上处理高达500 000个事件/秒。由于许多银行使用此解决方案,因此非常稳定。它支持基于Spring JMS模板的JMS输入和输出适配器。因此,您可以使用任何JMS实现进行事件处理,即ActiveMQ

答案 4 :(得分:2)

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

虽然这是一个传输层,但它可以为事件处理量身定制。

答案 5 :(得分:1)

无论您使用哪种工具,我都建议您从应用程序逻辑中隐藏中间件API。例如,如果您使用Apache Camel approach to hiding middleware,则可以根据您的具体要求轻松地从AMQP切换到SEDA到JMS到ActiveMQ到JavaSpaces到您自己的自定义MINA传输。

如果你想使用消息代理,我建议使用Apache ActiveMQ,这是最流行和最强大的开源消息代理,Apache和largest most active community behind it内都有outside it。< / p>

答案 6 :(得分:1)

看看akka(http://akka.io/)。它提供了一个分布式actor模型,与jlang的erlang同样具有java和scala API。

答案 7 :(得分:1)

您需要在java中为分布式事件处理实现Observer Design pattern。我使用事件流使用MongoDB上限集合和Observers来实现这一点。

您可以创建一个体系结构,其中触发器在封顶集合中发布文档,并且您的观察者线程使用tailable游标等待它。 如果您不理解我上面所说的内容,您需要刷新MongoDBjava skills

答案 8 :(得分:0)

如果JMS implementation不适合您,那么您可能会对XMPP方法感兴趣。有多个实现,还有Publish-Subscribe extension

答案 9 :(得分:0)

Avis event router可能适合您的需求。它足够快,可用于近实时事件传递,例如发送用于远程鼠标控制的鼠标事件(我们每天使用它的应用程序)。

Avis还用于聊天,虚拟存在和智能房间自动化,其中通常有10-20台计算机通过基于Avis的消息总线进行通信。其商业表兄(Mantara Elvin)用于大批量商业贸易活动处理。