Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ActiveMQ Ajax客户端时出现长时间延迟_Java_Ajax_Jms_Tomcat7_Activemq - Fatal编程技术网

Java 使用ActiveMQ Ajax客户端时出现长时间延迟

Java 使用ActiveMQ Ajax客户端时出现长时间延迟,java,ajax,jms,tomcat7,activemq,Java,Ajax,Jms,Tomcat7,Activemq,我正在测试基本的ActiveMQ AjaxServlet服务,以便与后端ActiveMQ服务通信。我遇到的问题是,使用ajax客户端从队列接收消息所需的时间有时超过20秒。每次延迟的时间都是完全不同的,但它足够长,我很关心解决方案的进展。我试过原型适配器和jquery适配器,它们都出现了相同的问题。我尝试了多种浏览器,但同样的问题仍然存在。我与远程队列的连接非常好,没有延迟 编辑 我看到消息被延迟了25秒,这是ajax连接的超时。我认为这不是正确的行为,它应该在收到消息时中断,然后重新连接。这是

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

编辑

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

ActiveMQ版本:5.9.0
Firefox: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>

org.apache.activemq.brokerURL
tcp://remoteaddress.example:61616
AjaxServlet
org.apache.activemq.web.AjaxServlet
真的
MessageServlet
org.apache.activemq.web.MessageServlet
1.
真的
MessageServlet
/问题/信息/*
AjaxServlet
/q/ajax/*
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>

var amq=org.activemq.amq;
amq.init({
uri:'q/ajax',
日志记录:正确
});
var myHandler=
{
rcvMessage:函数(消息)
{
警报(“收到”+消息);
}
};
var myDestination=queue://com.broadworks.dms.client';
var myMessage='fooooo barrrr';
var myId='1234';
addListener(myId、myDestination、myHandler.rcvMessage);
试一试{
amq.sendMessage(myDestination,myMessage);
}捕捉(错误){
警惕(err);
}

我曾经使用ActiveMQ的JavaScript库构建连接到ActiveMQ的web应用程序。不过,我改用了他们的WebSocket界面,再也没有回去。只需打开websocket接口,如下所述:。然后从这里使用STOMP over WebSocket库:

这是一个回归错误!我提供了一个补丁。
编译版在

谢谢凯文,我最终还是走了同样的路线。我修复了gwt activemq库以与websocket配合使用,它工作得非常好。如果网络不支持websocket,但允许AJAX连接,该怎么办?关于如何加快速度有什么建议吗?