Попытка получить кролик MSG без подтверждения, но безуспешно
У меня есть задача, в которой я пытаюсь получить все сообщения в очереди кролика. Мне нужно только ПОЛУЧИТЬ, а не ПОТРЕБИТЬ. Так вот код, я использую
def some_function_name() :
connection = rabbitObj.get_connection()
channel = rabbitObj.get_channel(connection)
while True :
method_frame, header_frame, body = channel.basic_get(queue='error_queue', no_ack=False)
if method_frame:
#do some work
else :
break #breaking the loop
while(True):
some_function_name()
когда я запускаю этот код, он работает правильно, в первый раз. Я получаю все сообщения в очереди, и все сообщения остаются в состоянии "Готово", но когда я запускаю цикл во второй раз, все сообщения превращаются в состояние "Неподтвержденные".
Требование: Каждый раз я должен только получать сообщения, и они не должны оставаться неподтвержденными.
Первый цикл:
Второй цикл:
Может ли кто-нибудь помочь мне с тем, что я делаю неправильно, или какие изменения я должен сделать.
Заранее спасибо:)
Редактировать 1: Что касается ответа @BarrensZeppelin, все сообщения будут потеряны, если я установлю no_ack=True. Проверьте скриншот ниже:
2 ответа
Я нашел обходной путь, и он работает. Закрытие кроличьего соединения, после того, как потребили, сделали свое дело (хотя теперь требуется время для создания и закрытия соединения каждый раз)
def some_function_name() :
connection = rabbitObj.get_connection()
channel = rabbitObj.get_channel(connection)
while True :
method_frame, header_frame, body = channel.basic_get(queue='error_queue', no_ack=False)
if method_frame:
#do some work
else :
break #breaking the loop
rabbitObj.close_connection(connection)
while(True):
some_function_name()
Когда вы установите no_ack=False
Вы специально указываете брокеру ожидать ответа, поэтому все сообщения становятся неподтвержденными. Попробуйте установить no_ack=True
,