Attendez pour un seul RabbitMQ message avec un délai d'attente

Je voudrais envoyer un message à un serveur RabbitMQ et puis attendre un message de réponse (sur un "reply-to" de la file d'attente). Bien sûr, je ne veux pas attendre éternellement dans le cas où l'application de traitement de ces messages est vers le bas - il doit y avoir un délai d'attente. Il sonne comme une tâche de base, mais je ne peux pas trouver un moyen de le faire. Maintenant, j'ai rencontré ce problème avec les deux py-amqplib et la RabbitMQ .NET client.

La meilleure solution que j'ai obtenu jusqu'à présent est d'un sondage à l'aide de basic_get avec sleep entre-deux, mais c'est assez moche:

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)

Il y a sûrement quelque meilleure façon de faire?

InformationsquelleAutor EMP | 2010-05-10