14

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

对于单个 JVM 中跨多个线程的事件处理,我找到了一些不错的候选者,例如 Jetlang。但是在我寻找分布式等价物时,我找不到任何足够轻量级来提供良好性能的东西。

有谁知道符合要求的任何实现?

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

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

4

10 回答 10

9

Hazelcast Topic 是一个分布式发布-订阅消息解决方案。

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 还支持分布式队列、地图、集合、列表上的事件。所有的事件也是有序的。

问候,

-塔利普

http://www.hazelcast.com

于 2008-10-29T17:20:15.183 回答
4

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

于 2008-10-08T04:25:05.747 回答
3

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

于 2008-10-29T17:30:07.397 回答
3

AMQP(高级消息队列协议)- 更多详细信息: http ://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol可能是您正在寻找的。

金融服务公司使用它来满足他们的高性能要求——apache有一个实现——http: //cwiki.apache.org/qpid/

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

于 2008-10-08T04:23:09.870 回答
3

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

尽管这是一个传输层,但它可以针对事件处理进行定制。

于 2011-12-28T23:59:30.193 回答
1

看看 akka (http://akka.io/)。它为具有 java 和 scala API 的 JVM 提供了与 erlang 相同的分布式参与者模型。

于 2012-01-11T13:17:59.753 回答
1

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

如果您想使用消息代理,我建议您使用Apache ActiveMQ,它是最流行和最强大的开源消息代理,在 Apache 内部和外部都拥有最大最活跃的社区

于 2008-10-08T09:26:10.570 回答
1

您需要为 Java 中的分布式事件处理实现观察者设计模式。我正在使用使用 MongoDB capped collection 和 Observers 的事件流来实现这一点。

您可以创建一个体系结构,在该体系结构中,您触发在上限集合中发布文档,并且您的观察者线程使用可尾游标等待它。如果你不明白我上面所说的,你需要复习一下你的MongoDBjava技能

于 2016-09-27T13:20:06.590 回答
0

如果JMS 实现不适合您,那么您可能会对XMPP方法感兴趣。有多种实现,并且还有一个Publish-Subscribe 扩展

于 2008-10-13T16:54:12.803 回答
0

Avis 事件路由器可能适合您的需求。它对于近乎实时的事件传递来说已经足够快了,例如发送鼠标事件以进行远程鼠标控制(我们每天都使用它的应用程序)。

Avis 还被用于聊天、虚拟状态和智能房间自动化,其中通常有 10-20 台计算机通过基于 Avis 的消息总线进行通信。它的商业表亲 (Mantara Elvin) 用于大容量商业贸易事件处理。

于 2009-07-15T05:31:08.030 回答