簡體   English   中英

php從rabbitmq錯誤中獲取消息

[英]php get message from rabbitmq error

我的amqp擴展版本是1.0.1,AMQP協議版本是0-9-1

從隊列中獲取消息:

<?php
try {
$conn = new AMQPConnection() ;
$conn->setLogin('guest') ;
$conn->setPassword('guest') ;
$conn->connect() ;
if ($conn->isConnected()) {
    $channel = new AMQPChannel($conn) ;
    if ($channel->isConnected())
    {
        $queue = new AMQPQueue($channel) ;
        $queue->setName('test_queue') ;
        $queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE) ;
        $queue->declare() ;
        $messages = $queue->get(AMQP_AUTOACK) ;
        print_r($messages->getBody()) ;
    }
} else {
    echo "connect failure ... " ;
}
$conn->disconnect() ;} catch (Exception $e) {
echo $e->getMessage() ;}?>

它不起作用..

Server channel error: 406, message: PRECONDITION_FAILED - parameters for queue 'test_queue' in vhost '/' not equivalent

在我看來,隊列已經存在,並且之前在vhost中使用不同的參數聲明(創建)了它。 每次都需要使用相同的參數准確地聲明隊列(或者刪除並使用所需的參數重新創建)。 嘗試通過管理插件(http://www.rabbitmq.com/management.html)刪除隊列,然后再次運行腳本

如果您的隊列已經創建,則不需要創建它(使用'declare'方法)並再次與exchange綁定。 恕我直言,你不應該這樣做a)這些行動需要管理特權b)它只夠一次c)你可能沒有生產的管理權限,你的代碼將被打破。 我相信最好用管理控制台或任何其他你喜歡的工具創建和綁定所有必需的隊列,然后以這種方式接收消息

// consider using connection more than once. that's only for illustration purposes.
$connection = new AMQPConnection([ put your credentials here ]);
$connection->connect();
if(!$connection->isConnected()) {
    throw new Exception('Connection failed.');
}

$chnlObj = new AMQPChannel($connection);
$queObj  = new AMQPQueue($chnlObj);
$queObj->setName('yourQueueName');
echo $queObj->get(AMQP_AUTOACK)->getBody();

// consider using connection more than once. that's only for illustration purposes.
$connection->disconnect();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM