RabbitMQ - Wie um zu prüfen, ob queue leer ist?

Ich habe eine web-service-Schnittstelle, die abstracts ein RabbitMQ-server (fragt mich nicht warum, ich weiss es ist ein unnötiger Schritt, aber ich muss). Das ist, ich Umfrage die Nachrichten aus der Warteschlange über einen web-service aufrufen, nicht direkt über amqp.

Konsum über basic.consumer blockiert die Ausführung Gewinde bis gibt es Nachrichten in der queue. Dies macht die web-service nicht zurück.

Code für die Abbildung:

    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();

    $channel->queue_declare(QUEUE_NAME, false, true, false, false);
    $ret = array('body' => '');

    $callback = function($msg) use ($channel, &$ret) {
        $ret['body'] = $msg->body;
        /*
        Here I would basic.cancel the consumer if there were no messages in the queue
        */
    };

    $channel->basic_consume(QUEUE_NAME, 'tag', false, true, false, false, $callback);

    if (count($channel->callbacks)) {
        $channel->wait(); //blocks here...
    }

    return $ret;
InformationsquelleAutor Ahmed Khalaf | 2015-09-08
Schreibe einen Kommentar