2013-02-28 151 views
0

我是activeMQ的新手。我有一些javascript连接到的amq获得/把消息:通过AJAX连接到非本地ActiveMQ

function init() 
{ 
//AMQ message handler 
amq.init({ 
    uri: amqURI, 
    logging: true, 
    timeout: amqTimeout, 
    clientId:amqClientID 
}); 
amq.addListener(amqName, amqTopic, amqHandler); 
} 

function amqHandler(message) 
{ 
alert("message"); 
} 

function amqSend(content) 
{ 
    amq.sendMessage(amqTopic, content); 
} 

所述网页是否在同一台机器上担任队列(这工作正常,即使用本地主机:端口/ AMQ或计算机名:端口/ AMQ在uri中) - 但是连接到另一台机器上的队列只会给我一个超时。

我所建立的jetty.xml包括:

<bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector"> 
       <property name="host" value="0.0.0.0"/> 
     <property name="port" value="8161" /> 
</bean> 

和web.xml:

<servlet-mapping> 
    <servlet-name>AjaxServlet</servlet-name> 
    <url-pattern>/amq/*</url-pattern> 
</servlet-mapping> 

我甚至试图增加activemq.xml中:

<transportConnector name="websocket" uri="ws://0.0.0.0:61614"/> 
<transportConnector name="nio" uri="nio://0.0.0.0:61616"/> 

但仍然没有运气连接到远程activeMQ。

谢谢!

回答

1

这听起来很像跨域请求的普通Ajax限制。该限制是在浏览器中,并阻止任何XmlHttpRequest发送到其他域,而不是加载站点。可以使用JSONP模式。但是,它不会解决你所遇到的问题(因为它支持HTTP get,但不支持HTTP POST,并且addListener和sendMessage都这样做)。

您可能想要考虑建立一个代理服务器或可以正确传输数据的服务器端。但这并不是微不足道的。

0

这可能是你从浏览器(或以某种方式限制JS的浏览器)之外的JavaScript调用Ajax。经过多次实验,我们发现问题在于servlet坚持认证,但由于没有浏览器来弹出窗口,因此失败了。

我在jetty-demo.xml中禁用了身份验证,并且瞧 - 它的工作!

请参阅标题为“确保this page上Web控制台的安全”一节了解如何操作。

相关问题