Я хотел бы отправить сообщение серверу RabbitMQ, а затем дождаться ответного сообщения (в очереди «ответ»). Конечно, я не хочу ждать вечно, если приложение, обрабатывающее эти сообщения, не работает - должен быть тайм-аут. Это звучит как очень простая задача, но я не могу найти способ сделать это. Я столкнулся с этой проблемой как с py-amqplib, так и с RabbitMQ .NET client.Подождите одно сообщение RabbitMQ с таймаутом
Лучшее решение я получил до сих пор является опрос с использованием basic_get
с sleep
в-между, но это довольно некрасиво:
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)
Безусловно, есть способ лучше?
Теперь это то, что я называю «великим ответом»: «это исправлено»! Принятие - в надежде, что он * слит в amqplib. – EMP
@EMP ха-ха :) смешно :) –