我有一个任务,我尝试在兔子队列中获取所有消息。我只需要GET,而不是消费。 所以这是代码,我正在使用
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()
当我运行此代码时,它第一次正常工作。我收到队列中的所有邮件,并且所有邮件都保留在' Ready'状态,但是当我第二次运行循环时,所有消息都会变为“未确认”状态。状态。
要求:每次我只应该获取消息,他们不应该不知道。
First Loop:
第二圈:
任何人都可以帮助我,我做错了什么,或者我应该做些什么改变。
提前致谢:)
编辑1: 至于@BarrensZeppelin的回答,如果我设置no_ack = True,所有的消息都会丢失。查看以下截图:
答案 0 :(得分:0)
当您设置no_ack=False
时,您明确告诉代理期望回复,这就是所有消息都变为未确认的原因。尝试设置no_ack=True
。
答案 1 :(得分:0)
我有一个解决方法,它正在工作。 关闭兔子连接后,消费完成了伎俩。(虽然现在每次都需要时间来创建和关闭连接)
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()