2

ノードサーバーでstomp-jsを使用して、同じコンシューマーへのメッセージをキューに入れようとしていました.

プロデューサー:

producer.send({'JMSXGroupID':JMSXGroupID, 'destination':confMgr.getConfig("jmsqueue.destination"), 'body':JSON.stringify(msg), 'persistent':'true'}, false);

消費者:

client.on('message', function(message) {
    client.ack(message.headers['message-id']);
})

同じ JMSXGroupID を使用して 2 つのメッセージを送信していましたが、クライアントは両方のメッセージを並行して処理しているように見えます。「correlation-id」を使用してみましたが、どちらも機能していないようです。誰かがより良い方法を提案できますか? よろしくお願いします、チャンドラ。

4

1 に答える 1

2

私はあなたがこのstomp-jslibを使用していると思います(私が間違っている場合は私を訂正してください):https ://github.com/benjaminws/stomp-js

メッセージグループはStompを使用するActiveMQによってサポートされているため、メッセージを順番に取得している可能性があります。それらを順番に処理するには、クライアントで各メッセージを同期的に処理する必要があります。これは、リスナーが実行するスレッドの数を制御できる場合はかなり簡単です。これは、Javaスクリプトでは簡単ではない場合があります。そうではありません

私が見ることができることから、あなたが使用しているライブラリは最もよく文書化されていません、あなたが微調整できる唯一の設定は(私はそれを試していません!)、プリフェッチサイズを1に変更することです。

var headers = {
  destination: '/queue/test_stomp',
  ack: 'client',
  'activemq.prefetchSize': '1'
};

このlibが次のメッセージをフェッチするために直接熱心に開始する場合もありますが、テストすることをお勧めします。

一方、node.jsとjavaスクリプトを実行しているため、シーケンスに依存しないようにアプリケーションを再設計することもできます。パフォーマンスを大幅に最適化でき、同期動作を回避できるため、メッセージングでシーケンスに依存しない方が常に優れています。

相関IDを使用して何を達成しようとしたかはわかりませんが、そのヘッダーは、要求と応答を相関させるために使用されます。これは、ここでは当てはまりません。

于 2012-08-11T21:27:45.583 に答える