我是Java EE的新手,一直在寻找一种实现发布/订阅类型模型的常用方法,而不必使用JMS。我有兴趣创建一个简单的应用程序,当它们从服务器推送到客户端时显示字符串。我想调查是在没有轮询的情况下这样做以减少不必要的请求。这些事件会有很大的不同,所以我认为在一定时间内轮询不是最佳解决方案,但客户应该立即显示事件。
我已经了解了在Java EE之外执行此操作的不同方法,例如带有套接字api的HtML5。但我想知道如何在Java EE中执行此操作,我假设有一些非常常见的事情,但我还没有遇到它。真的,我只是在寻找技术名称,以便我可以对其实施进行进一步的研究。
答案 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经纪人。这里重要的一点是,这些代理中的一些并不专门与任何J2EE应用程序服务器绑定,并且可以独立工作。查看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