0

私はactiveMQを初めて使用します。メッセージを取得/送信するために amq に接続する JavaScript があります。

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);
}

Web ページがキューと同じマシンで提供されている場合 (つまり、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 を呼び出している可能性があります。多くの実験の結果、問題はサーブレットが認証を要求していることであることがわかりましたが、ウィンドウをポップアップするブラウザーがなかったため失敗しました。

jetty-demo.xml で認証を無効にすると、できあがりました。

その方法については、このページの「 Web コンソールの保護」というタイトルのセクションを参照してください。

于 2013-07-10T15:39:38.647 に答える