2014-04-07 26 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连接?有关如何加快速度的建议? –