2014-04-07 77 views
1

我正在測試基本的ActiveMQ AjaxServlet服務以與後端ActiveMQ服務進行通信。我遇到的問題是,使用ajax客戶端從隊列中接收消息所用的時間有時會超過20秒。延遲的時間長度每次都完全不同,但是我很關心如何解決問題。我試過了原型適配器和jquery適配器,兩者都表現出相同的問題。我嘗試了多個瀏覽器,同樣的問題仍然存在。我與遠程隊列有良好的連接,並且沒有延遲。使用ActiveMQ Ajax客戶端時的延遲很長

編輯

我看到該消息被延遲25秒這是AJAX連接的超時。我不認爲這是正確的行爲,並且在收到消息時應該中斷,然後重新連接。這是正確的假設嗎?

ActiveMQ的版本:5.9.0
火狐:28
的Chrome:最新版本
的Tomcat:7.0.52

的web.xml

<context-param> 
    <param-name>org.apache.activemq.brokerURL</param-name> 
    <param-value>tcp://remoteaddress.example:61616</param-value> 
</context-param> 

<servlet> 
    <servlet-name>AjaxServlet</servlet-name> 
    <servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class> 
    <async-supported>true</async-supported> 
</servlet> 

<servlet> 
    <servlet-name>MessageServlet</servlet-name> 
    <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <async-supported>true</async-supported> 
</servlet> 


<servlet-mapping> 
    <servlet-name>MessageServlet</servlet-name> 
    <url-pattern>/q/message/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>AjaxServlet</servlet-name> 
    <url-pattern>/q/ajax/*</url-pattern> 
</servlet-mapping> 

的Javascript

<script type="text/javascript" src="js/amq/prototype.js"></script> 
    <script type="text/javascript" src="js/amq/amq_prototype_adapter.js"></script> 
    <script type="text/javascript" src="js/amq/amq.js"></script> 
    <script type="text/javascript"> 

    var amq = org.activemq.Amq; 
    amq.init({ 
    uri: 'q/ajax', 
    logging: true 
    }); 

    var myHandler = 
    { 
    rcvMessage: function(message) 
    { 
     alert("received "+message); 
    } 
    }; 

    var myDestination='queue://com.broadworks.dms.client'; 

    var myMessage = '<message>foooooo barrrr</message>'; 
    var myId = '1231234'; 

    amq.addListener(myId, myDestination, myHandler.rcvMessage); 


    try { 
    amq.sendMessage(myDestination, myMessage); 
    } catch (err) { 
    alert(err); 
    } 

</script> 

回答

2

我曾經使用ActiveMQ的JavaScript庫來構建連接到ActiveMQ的Web應用程序。我轉而使用他們的websockets界面,但從未回去。只需打開websocket界面,如下所述:http://activemq.apache.org/mqtt.html。然後從這裏使用通過WebSocket庫STOMP:http://jmesnil.net/stomp-websocket/doc/

+0

感謝凱文,我最終走了同樣的路線。我修復了gwt activemq庫與websockets一起工作,並且完美運行。 –

+0

如果網絡不支持websocket,但它確實允許AJAX連接?有關如何加快速度的建議? –