2015-01-09 8 views
6

メッセージの送受信にphp-amqplibを使用しようとしています。それは、端末上で送受信を行う。しかし、Webブラウザに行くと、キューから受信することができず、メッセージを継続的に待ちます。私はreceive.phpのコードの下に使用さウェブブラウザでphp-amqplib rabbitMQを使用する方法

require_once(__DIR__ . '/lib/php-amqplib/amqp.inc'); 
include_once(__DIR__ . '/config/config.php'); 
$connection = new AMQPConnection(HOST, PORT, USER, PASS, VHOST); 
$channel = $connection->channel(); 
$channel->queue_declare('test22');  
$callback = function($msg){ 
echo $msg->body; 
};  
$channel->basic_consume('test22', 'consumer_tag', false, true, false, false, $callback); 

while(count($channel->callbacks)) { 
$channel->wait(); 
}  
$channel->close(); 
$connection->close(); 

私が代わりにコールバック関数の下に使用しますが、キューから消費しないならば、それは「メッセージがキューに利用可能であることを意味

$abc=$channel->basic_get("test22", false, 2);  
if(!empty($abc)) 
{ 
print_r($abc->body); 
} 

キューから最初のメッセージを取得しますテスト22 '。 私に手がかりを与えてください。

+1

使用しているライブラリのバージョンは?このファイル 'amqp.inc'は現代版のライブラリではもう使われていません。私はあなたがこれを使用することをお勧めします:https://github.com/videlalvaro/php-amqplib/ –

+0

https://getcomposer.org/を介してPHPサードパーティを使用する方がよいでしょう。 – smarber

+0

あなたのreceive.php/consumerは、ターミナル経由でプロセスとして実行する必要があります。次に、端末またはブラウザの実行スクリプトから送信されたメッセージをプルする必要があります。 – OddEssay

答えて

1

変更echo $msg->body;error_log($msg->body);(または使用している他のログシステム)。おそらくログにメッセージが表示されると思います。 Webブラウザでは、ページがすでにロードされているため、スクリプトがメッセージを受信して​​も変更されません。

+0

優れた答え。 @Prakと同じ問題があった。 あなたの答えは私の問題を解決しました。 –

関連する問題