Java EE替代使用JMS发布订阅

时间:2011-10-10 19:02:03

标签: java web-services java-ee push-notification publish-subscribe

我是Java EE的新手,一直在寻找一种实现发布/订阅类型模型的常用方法,而不必使用JMS。我有兴趣创建一个简单的应用程序,当它们从服务器推送到客户端时显示字符串。我想调查是在没有轮询的情况下这样做以减少不必要的请求。这些事件会有很大的不同,所以我认为在一定时间内轮询不是最佳解决方案,但客户应该立即显示事件。

我已经了解了在Java EE之外执行此操作的不同方法,例如带有套接字api的HtML5。但我想知道如何在Java EE中执行此操作,我假设有一些非常常见的事情,但我还没有遇到它。真的,我只是在寻找技术名称,以便我可以对其实施进行进一步的研究。

4 个答案:

答案 0 :(得分:3)

也许Hazelcast值得你去看看。它为发布/订阅消息传递提供了易于使用的Distributed Topic功能。

文档中的一个简单示例:

import com.hazelcast.core.Topic;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.MessageListener;

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);
    } 
}

答案 1 :(得分:1)

我不是这个主题的专家,但由于没有人回答我会尝试解释我所知道的。

首先,J2EE使用JMS规范作为其基本的发布/订阅机制。那里有各种JMS经纪人。这里重要的一点是,这些代理中的一些并不专门与任何J2​​EE应用程序服务器绑定,并且可以独立工作。查看Apache的ActiveMQ,它可以作为独立的JMS代理使用。它很好地绑定了许多语言。因此,您可以使用JMS代理自由组合非J2EE体系结构。

其次,还有其他消息队列代理符合可以在J2EE体系结构中使用的其他标准。 DDS(数据分发服务)就是一个例子。它是一个OMG标准,具有Java绑定,如果需要,可以在J2EE体系结构中使用。

第三,Web服务标准定义了WS-Notification Broker标准。据我所知,这不是J2EE的一部分,但是得到了许多SOA提供商的支持。

因此,您有许多可以在J2EE体系结构中自由混合的替代方案。

我希望这会有所帮助。

答案 2 :(得分:1)

我只回答Java EE部分,因为我不熟悉你引用的Apple技术。

在我看来,企业Java不适合这种任务。 Java EE应用程序的主要用例是:“许多用户在集中式应用程序上执行大量小型,大部分独立的任务”。 Java EE为中央应用程序提供了扩展到任意数量用户的方法。并且主要是用户发起和引导对话。

但是,您的用例要求服务器是活动部分。当然,您可以在Java EE应用程序服务器上运行几乎任何类型的逻辑,异步任务,但这并不意味着您应该这样做。

答案 3 :(得分:0)

Redis有一个可能感兴趣的发布/订阅机制:http://redis.io/topics/pubsub