PHP AMQP使用者:服务器通道错误:404,消息:NOT_FOUND

时间:2012-07-15 01:55:56

标签: php rabbitmq

我在pecl 1.0.3中使用amqp扩展,用2.7.1 rabbitmq编译。

我正在努力让一个基本的消费者/制作人示例工作,但我一直在收到错误。关于这个扩展的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 receive:

  

PHP致命错误:未捕获异常'AMQPQueueException',消息'服务器通道错误:404,消息:NOT_FOUND - 在/home/jamescowhen/test.php:21

有人能指出我正确的方向吗?整个样本来自用户注释: http://www.php.net/manual/en/amqp.examples.php#109024

1 个答案:

答案 0 :(得分:3)

异常似乎是由于您的队列未被声明(因为错误消息描述404 - 未找到队列'action')。这个例子适用于原始海报的原因可能是因为他已经提前宣布了队列,却没有意识到他的例子中缺少这个。

您可以通过在队列对象上调用 - > declare()来声明队列。您还必须使用交换对象执行此操作,除非您确定在尝试将队列挂接到它时它已经存在。