0

デフォルトの取引所に発行したときに、確認が返ってこないようです。現在、この投稿で提案されている node-amqp のマスター ブランチを使用しています。

コード:

var amqp = require('amqp');
var conn = amqp.createConnection({ host: 'localhost' });

conn.once('ready', function () {
    conn.publish('test_queue', 'test message', { /* empty options */ }, function (a, b) {
        console.log('Publish complete.');
    });
});

デフォルトの交換は、空の文字列を使用した直接交換だと思います (他のすべてのオプションはデフォルトです)。exchange.publish メソッドによると、confirm オプションが true の場合、指定されたコールバックが呼び出されます。自分で交換を作成しようとしましたが、運もありませんでした。

var amqp = require('amqp');
var conn = amqp.createConnection({ host: 'localhost' });

conn.once('ready', function () {
    conn.exchange('', { confirm: true }, function (exchange) {
        exchange.publish('test_queue', 'test message', { /* empty options */ }, function (a, b) {
            console.log('Publish complete.');
        });
    });
});

RabbitMQ Web サイトの基本的な Python 受信スクリプトを使用して、メッセージを正常に発行していることを確認できます。

デフォルトの交換は、publish メソッド内で ack メッセージを発行しますか? 私はこれを間違って呼んでいますか?

4

1 に答える 1

0
  1. パブリッシュする前にキューに接続する必要があります。パブリッシュの呼び出しでキュー名を指定するだけでは十分ではありません。
  2. キューをエクスチェンジにバインドする必要があります。そうしないと、発行が機能しません。

何かのようなもの:

connection.queue("test_queue", function(q) {
    q.bind(exchange, function() {
        exchange.publish(...);
    }
});

これにより、メッセージが新しい交換で指定されたキューに入れられ、コールバックが行われます。あなたが私のようで、ドキュメントを正しく読んでいない場合、publish からのコールバックが成功を示すために false を送信することはありません (つまり、errorHasOccured はコールバックの最初の引数です)。

于 2014-01-31T13:26:02.810 に答える