1

2.7.1 rabbitmq でコンパイルされた pecl 1.0.3 で amqp 拡張機能を使用しています。

基本的な消費者/生産者の例を機能させようとしていますが、エラーが発生し続けます。この拡張機能に関する php ドキュメントはほとんどなく、その多くは古くなっているか間違っているようです。

ユーザーが投稿したコードを使用しましたが、消費者の部分が機能していないようです

繋がり:

function amqp_connection() {
    $amqpConnection = new AMQPConnection();
    $amqpConnection->setLogin("guest");
    $amqpConnection->setPassword("guest");
    $amqpConnection->connect();

    if(!$amqpConnection->isConnected()) {
       die("Cannot connect to the broker, exiting !\n");
    }

    return $amqpConnection;
}

送信者:

function amqp_send($text, $routingKey, $exchangeName){
    $amqpConnection = amqp_connection();

    $channel = new AMQPChannel($amqpConnection);
    $exchange = new AMQPExchange($channel);

    $exchange->setName($exchangeName);
    $exchange->setType("fanout");


    if($message = $exchange->publish($text, $routingKey)){
       echo "sent";
    }

    if (!$amqpConnection->disconnect()) {
        throw new Exception("Could not disconnect !");
    }
}

レシーバー:

function amqp_receive($exchangeName, $routingKey, $queueName) {
    $amqpConnection = amqp_connection();

    $channel = new AMQPChannel($amqpConnection);
    $queue = new AMQPQueue($channel);
    $queue->setName($queueName);
    $queue->bind($exchangeName, $routingKey);

    //Grab the info
    //...
}

次に送信します。

amqp_send("Abcdefg", "action", "amq.fanout");

そしてそれを受け取る:

amqp_receive("amq.fanout","action","action");

スクリプトの実行で問題が発生し続け、amqp 受信を示します。

PHP 致命的なエラー: メッセージ「サーバー チャネル エラー: 404、メッセージ: NOT_FOUND - /home/jamescowhen/test.php:21 の vhost '/'' にキュー 'action' がありません

誰かが私を正しい方向に向けることができますか? サンプル全体は、次のユーザー ノートからのものです: http://www.php.net/manual/en/amqp.examples.php#109024

4

1 に答える 1

3

例外は、キューが宣言されていないことが原因のようです (エラー メッセージに 404 - キューの「アクション」が見つかりませんでした)。この例が元の投稿者で機能する理由は、おそらく、例に欠落していることに気付かずに、すでにキューを宣言しているためです。

キュー オブジェクトで ->declare() を呼び出すことにより、キューを宣言できます。キューを交換オブジェクトにフックしようとするときに、交換オブジェクトが既に存在することが確実でない限り、交換オブジェクトでもこれを行う必要があります。

于 2012-07-16T09:46:55.633 に答える