【问题标题】:Lengthy delays when using ActiveMQ Ajax Client使用 ActiveMQ Ajax 客户端时的长时间延迟
【发布时间】:2014-08-05 17:50:39
【问题描述】:

我正在测试基本的 ActiveMQ AjaxServlet 服务以与后端 ActiveMQ 服务进行通信。我遇到的问题是使用 ajax 客户端从队列接收消息所需的时间有时是 20 多秒。每次延迟的长度都完全不同,但它足够长,我担心继续推进解决方案。我已经尝试过原型适配器和 jquery 适配器,并且都表现出相同的问题。我尝试了多个浏览器,但同样的问题仍然存在。我与远程队列有很好的连接,并且没有延迟。

编辑

我看到消息被延迟了 25 秒,这是 ajax 连接的超时。我认为这不是正确的行为,它应该在收到消息时中断,然后重新连接。这是正确的假设吗?

ActiveMQ 版本:5.9.0
火狐:28
Chrome:最新版本
雄猫: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>

【问题讨论】:

    标签: java ajax jms tomcat7 activemq


    【解决方案1】:

    我曾经使用 ActiveMQ 的 JavaScript 库来构建连接到 ActiveMQ 的 Web 应用程序。不过,我改用了他们的 websockets 界面,再也没有回去过。只需按照此处所述打开 websocket 接口:http://activemq.apache.org/mqtt.html。然后从这里使用 STOMP over WebSocket 库:http://jmesnil.net/stomp-websocket/doc/

    【讨论】:

    • 谢谢凯文,我最终走上了同样的路。我修复了 gwt activemq 库以与 websockets 一起使用,它运行良好。
    • 如果网络不支持 websocket 但它允许 AJAX 连接怎么办?关于如何加快速度的任何建议?
    【解决方案2】:

    这是一个回归错误!我在https://issues.apache.org/jira/browse/AMQ-5182 提供了一个补丁。 编译版在https://bitbucket.org/greyfairer/apache-activemq/downloads

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 2022-07-29
      • 1970-01-01
      • 2018-06-20
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多