2015-01-09 11 views
6

Próbuję użyć php-amqplib do wysyłania i odbierania wiadomości. Działa wysyłanie/odbieranie na terminalu. Ale po przejściu do przeglądarki internetowej, nie może odbierać z kolejki, ciągle czeka na wiadomość. Użyłem poniżej kod do receive.phpJak używać php-amqplib rabbitMQ na przeglądarce internetowej

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

Robi się pierwszy komunikat z kolejki, jeśli mogę użyć poniżej zamiast funkcji zwrotnej, ale nie spożywać z kolejki

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

Oznacza to wiadomości są dostępne w kolejce " test22 '. daj mi jakąkolwiek wskazówkę.

+1

Jaką wersję biblioteki używasz? Ten plik 'amqp.inc' nie jest już używany we współczesnych wersjach biblioteki. Proponuję użyć tego: https://github.com/videlalvaro/php-amqplib/ –

+0

Lepiej skorzystaj z php firmy zewnętrznej przez https://getcomposer.org/. – smarber

+0

Twój plik receive.php/konsument powinien być uruchamiany tylko przez terminal jako proces. Powinien następnie pobrać komunikaty wysłane zarówno ze skryptów uruchamianych z poziomu terminala, jak i przeglądarki. – OddEssay

Odpowiedz

1

Zmień echo $msg->body; na error_log($msg->body); (lub inny system logowania, którego używasz). Myślę, że prawdopodobnie zobaczysz wiadomości w dziennikach. W przeglądarce internetowej strona jest już załadowana, więc nie zmieni się, nawet jeśli skrypt otrzyma wiadomość.

+0

Doskonała odpowiedź. Miałem ten sam problem co @Prak; Twoja odpowiedź rozwiązała mój problem. –

Powiązane problemy