從上篇文章可知,每個工作者,都會依次分配到任務。那么如果一個工作者,在處理任務的時候掛掉,這個任務就沒有完成,應當交由其他工作者處理。所以應當有一種機制,當一個工作者完成任務時,會反饋消息。
消息確認就是當工作者完成任務后,會反饋給rabbitmq
修改receive.py的內容:
1 def callback(ch, method, properties, body): 2 3 print("received msg...start processing....",body) 4 time.sleep(5) 5 print(" [x] msg process done....",body) 6 ch.basic_ack(delivery_tag = method.delivery_tag)
或者修改:
1 channel.basic_consume(callback, queue=queue_name,no_ack=True)
即使其中一個工作者ctrl+c退出后,正在執行的任務也不會丟失,rabbitmq會將任務重新分配給其他工作者。