尝试在没有 ack 的情况下获取 rabbit msg,但没有成功
Trying to GET rabbit msg without ack, but no success
我有一个任务,我试图在 rabbit 队列中获取所有消息。我只需要 GET,而不是 CONSUME。
所以这是代码,我正在使用
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()
当我运行这段代码时,它工作正常,首先time.I获取队列中的所有消息并且所有消息保持在'Ready'状态,但是当我运行 第二次循环,所有消息转为'Unacknowledged'状态。
要求:每次我应该只获取消息,并且它们不应该未被确认。
第一个循环:
第二个循环:
任何人都可以帮助我,我做错了什么,或者我应该做些什么改变。
提前致谢:)
编辑 1:
至于@BarrensZeppelin 的回答,如果我设置 no_ack=True,所有消息都会丢失。检查下面的截图:
当您设置 no_ack=False
时,您明确告诉代理期待回复,这就是为什么所有消息都变为未确认的原因。尝试设置 no_ack=True
.
我找到了一个解决方法,它正在工作。
关闭兔子连接,消费后就成功了。(虽然现在每次创建和关闭连接都需要时间)
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()
我有一个任务,我试图在 rabbit 队列中获取所有消息。我只需要 GET,而不是 CONSUME。 所以这是代码,我正在使用
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()
当我运行这段代码时,它工作正常,首先time.I获取队列中的所有消息并且所有消息保持在'Ready'状态,但是当我运行 第二次循环,所有消息转为'Unacknowledged'状态。
要求:每次我应该只获取消息,并且它们不应该未被确认。
第一个循环:
第二个循环:
任何人都可以帮助我,我做错了什么,或者我应该做些什么改变。
提前致谢:)
编辑 1:
至于@BarrensZeppelin 的回答,如果我设置 no_ack=True,所有消息都会丢失。检查下面的截图:
当您设置 no_ack=False
时,您明确告诉代理期待回复,这就是为什么所有消息都变为未确认的原因。尝试设置 no_ack=True
.
我找到了一个解决方法,它正在工作。 关闭兔子连接,消费后就成功了。(虽然现在每次创建和关闭连接都需要时间)
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()