Tôi muốn gửi tin nhắn đến một máy chủ RabbitMQ và sau đó chờ tin nhắn trả lời (trên hàng đợi "trả lời"). Tất nhiên, tôi không muốn chờ đợi mãi mãi trong trường hợp ứng dụng xử lý các tin nhắn này là xuống - cần phải có một thời gian chờ. Nghe có vẻ như một nhiệm vụ rất cơ bản, nhưng tôi không thể tìm ra cách để làm điều này. Bây giờ tôi đã gặp sự cố này với cả hai py-amqplib và RabbitMQ .NET client.Đợi một tin nhắn RabbitMQ duy nhất với thời gian chờ
Giải pháp tốt nhất mà tôi đã có cho đến nay là để thăm dò ý kiến sử dụng basic_get
với sleep
ở giữa, nhưng điều này là khá xấu xí:
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)
Chắc chắn có một số cách tốt hơn?
Bây giờ đây là những gì tôi gọi là "câu trả lời tuyệt vời": "nó đã được sửa"! Chấp nhận - với hy vọng rằng * * được hợp nhất thành amqplib. – EMP
@EMP haha :) funny :) –