2015-01-09 16 views
6

Ich versuche, php-amqplib zum Senden und Empfangen von Nachrichten zu verwenden. Es funktioniert Senden/Empfangen am Terminal. Aber wenn Webbrowser gehen, nicht aus der Warteschlange empfangen kann, wartet er kontinuierlich auf eine Nachricht. Früher habe ich unten Code für receive.phpWie man php-amqplib rabbitMQ im Webbrowser verwendet

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(); 

Es wird erste Nachricht aus der Warteschlange, wenn ich unten statt Callback-Funktion verwenden, aber nicht verbrauchen aus der Warteschlange

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

Es bedeutet, Nachrichten in der Warteschlange zur Verfügung stehen ' test22 '. geben Sie mir einen Hinweis.

+1

Welche Version der Bibliothek verwenden Sie? Diese Datei 'amqp.inc' wird in modernen Versionen der Bibliothek nicht mehr verwendet. Ich schlage vor, dass Sie dieses verwenden: https://github.com/videlalvaro/php-amqplib/ –

+0

Sie sollten PHP-Drittanbieter besser über https://getcomposer.org/ verwenden. – smarber

+0

Ihre receive.php/consumer sollte nur als Prozess über Terminal laufen. Er sollte dann Nachrichten abrufen, die sowohl vom Terminal- als auch vom Browser-Skript gesendet wurden. – OddEssay

Antwort

1

Ändern Sie echo $msg->body; in error_log($msg->body); (oder ein anderes Loggin-System, das Sie verwenden). Ich denke, Sie werden wahrscheinlich die Nachrichten in den Protokollen sehen. Im Webbrowser ist die Seite bereits geladen, so dass sie sich nicht ändert, selbst wenn das Skript die Nachricht empfängt.

+0

Ausgezeichnete Antwort. Ich hatte das gleiche Problem wie @Prak; Ihre Antwort löste mein Problem. –