0

我是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。

谢谢!

4

2 回答 2

1

这听起来很像跨域请求的正常 Ajax 限制。限制在浏览器中,并防止将任何 XmlHttpRequest 发送到站点加载之外的其他域。

有一些方法可以绕过这个限制,例如使用JSONP模式。但是,它不会解决您遇到的问题(因为它支持 HTTP get,但不支持 HTTP POST,并且 addListener 和 sendMessage 都这样做)。

您可能想考虑在服务器端建立一个代理或可以正确管道数据的东西。但这并不是那么微不足道。

于 2013-03-01T13:58:33.580 回答
0

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

我在 jetty-demo.xml 中禁用了身份验证,瞧——它成功了!

请参阅此页面上标题为:保护 Web 控制台的部分以了解如何执行此操作。

于 2013-07-10T15:39:38.647 回答