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