我正在测试基本的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>
的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>
答案 0 :(得分:2)
我曾经使用ActiveMQ的JavaScript库来构建连接到ActiveMQ的Web应用程序。我切换到使用他们的websockets接口,但从未回过头来。只需打开websocket界面,如下所述:http://activemq.apache.org/mqtt.html。然后从这里使用STOMP over WebSocket库:http://jmesnil.net/stomp-websocket/doc/
答案 1 :(得分:0)