4

我是Java EE的新手,一直在寻找实现发布/订阅类型模型而不必使用JMS的常见方法。我有兴趣创建一个简单的应用程序,它可以在从服务器推送到客户端时显示字符串。我想调查的是没有进行轮询来减少不必要的请求。事件会有所不同,所以我不认为轮询一段时间会是最好的解决方案,但客户应该立即显示事件。使用JMS发布订阅的Java EE替代方案

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

+0

而且这应该是异步的。 – Randnum

+0

或者JMS是长轮询/彗星的唯一选择。 – Randnum

回答

1

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

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

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

+0

我认为你是对的。经过进一步的研究后,我发现彗星/长轮询是解决这个问题的最常见的方法,但它们需要长时间保持连接。我不知道在许多用户使用该应用程序后,如何进行扩展,您将拥有许多“开放”连接。 – Randnum

1

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

首先,J2EE使用JMS规范作为其基本发布/订阅机制。那里有各种JMS经纪人。这里重要的一点是,其中一些代理并不特别绑定到任何J2EE应用服务器,并且可以独立工作。查看Apache的ActiveMQ,它可以作为独立的JMS代理。它很好地绑定了很多语言。因此,您可以使用JMS代理自由组合非J2EE体系结构。其次,还有其他符合其他标准的消息队列代理,可以在J2EE体系结构中使用。 DDS(数据分发服务)就是一个例子。它是一种OMG标准,并且具有Java绑定功能,如果需要,可以在J2EE架构中使用。

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

因此,您有很多可以在J2EE体系结构中自由混合的选择。

我希望这会有所帮助。

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