Ich möchte eine Nachricht an einen RabbitMQ-Server senden und dann auf eine Antwortnachricht warten (in einer "Antwort" -Warteschlange). Natürlich möchte ich nicht für immer warten, falls die Anwendung, die diese Nachrichten verarbeitet, nicht funktioniert - es muss ein Timeout sein. Es klingt wie eine sehr einfache Aufgabe, aber ich kann keinen Weg finden, dies zu tun. Ich habe jetzt dieses Problem sowohl mit py-amqplib als auch mit der RabbitMQ .NET client.Warte auf eine einzelne RabbitMQ-Nachricht mit einer Zeitüberschreitung
Die beste Lösung, die ich bisher bekommen habe ist mit basic_get
mit sleep
in-between, abzufragen, 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)
Sicher ist etwas besserer Weg gibt?
Jetzt nenne ich das eine "große Antwort": "Es ist behoben"! Akzeptieren - in der Hoffnung, dass es * in amqplib zusammengeführt wird. – EMP
@EMP haha :) lustig :) –