2015-01-09 9 views
6

Sto tentando di utilizzare php-amqplib per inviare e ricevere messaggi. Funziona l'invio/ricezione sul terminale. Ma quando vai per il browser web, non è in grado di ricevere dalla coda attende continuamente il messaggio. Ho usato qui di seguito il codice per receive.phpCome utilizzare php-amqplib rabbitMQ sul browser web

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

Ottiene primo messaggio dalla coda se uso qui di seguito, invece di funzione di callback, ma non consuma dalla coda

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

Significa messaggi sono disponibili in coda ' test22' . dammi qualche indizio.

+1

Quale versione della libreria stai utilizzando? Questo file 'amqp.inc' non è più usato nelle versioni moderne della libreria. Ti suggerisco di usare questo: https://github.com/videlalvaro/php-amqplib/ –

+0

Faresti meglio a utilizzare php di terze parti tramite https://getcomposer.org/. – smarber

+0

Il tuo receive.php/consumer dovrebbe essere eseguito solo tramite terminale come processo. Dovrebbe quindi estrarre i messaggi inviati dal terminale o dagli script di esecuzione del browser. – OddEssay

risposta

1

Modifica echo $msg->body; a error_log($msg->body); (o altro sistema di registrazione che si sta utilizzando). Penso che probabilmente vedrai i messaggi sui log. Sul browser Web la pagina è già caricata in modo che non cambierà anche se lo script sta ricevendo il messaggio.

+0

Ottima risposta. Ho avuto lo stesso problema di @Prak; la tua risposta ha risolto il mio problema. –