我是activeMQ的新手。我有一些javascript连接到amq来获取/放置消息:
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);
}
如果网页在与队列相同的机器上提供(即在uri中使用localhost:port / amq或machinename:port / amq),这样可以正常工作 - 但是连接到另一台机器上的队列只会给我一个超时
我已设置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仍然没有运气。
谢谢!
答案 0 :(得分:1)
这听起来很像跨域请求的正常Ajax限制。限制在浏览器中,并阻止任何XmlHttpRequest发送到除加载站点之外的其他域。
有一些解决此限制的方法,例如使用JSONP模式。但是,它不会解决您遇到的问题(因为它支持HTTP get,但不支持HTTP POST,并且addListener和sendMessage都会这样做)。
您可能想要设置一个代理或可以正确管道数据的东西,服务器端。但这不是那么微不足道。
答案 1 :(得分:0)
可能是您在浏览器之外从Javascript调用Ajax(或者以某种方式限制JS的浏览器)。经过多次实验,我们发现问题是servlet坚持认证,但由于没有浏览器弹出窗口,它失败了。
我在jetty-demo.xml中禁用了身份验证,瞧 - 它工作正常!
请参阅标题为“在this page上保护Web控制台”一节,了解如何执行此操作。