Warten auf eine Einzel-RabbitMQ-Meldung mit einem timeout

Ich würde gerne eine Nachricht senden, die eine RabbitMQ-server und warten dann auf eine Antwort-Nachricht ("reply-to" - Warteschlange). Natürlich, ich will nicht ewig warten, falls die Anwendung die Verarbeitung dieser Nachrichten ist down - muss es ein timeout. Es klingt wie eine sehr einfache Aufgabe sein, doch ich kann nicht einen Weg finden, dies zu tun. Ich habe jetzt dieses problem mit beiden py-amqplib und die RabbitMQ .NET-client.

Die beste Lösung, die ich habe, so weit ist die Umfrage mit basic_get mit sleep in-zwischen, aber das ist ziemlich hässlich:

def _wait_for_message_with_timeout(channel, queue_name, timeout):
    slept = 0
    sleep_interval = 0.1

    while slept < timeout:
        reply = channel.basic_get(queue_name)
        if reply is not None:
            return reply

        time.sleep(sleep_interval)
        slept += sleep_interval

    raise Exception('Timeout (%g seconds) expired while waiting for an MQ response.' % timeout)

Sicherlich gibt es einige bessere Weg?

InformationsquelleAutor EMP | 2010-05-10

Schreibe einen Kommentar