试图在没有确认的情况下获取兔子信息,但没有成功

时间:2017-09-12 08:12:32

标签: python rabbitmq pika python-pika

我有一个任务,我尝试在兔子队列中获取所有消息。我只需要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:

First Loop

第二圈:

enter image description here

任何人都可以帮助我,我做错了什么,或者我应该做些什么改变。

提前致谢:)

编辑1: 至于@BarrensZeppelin的回答,如果我设置no_ack = True,所有的消息都会丢失。查看以下截图: enter image description here

2 个答案:

答案 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()