RabbitMQ学习(2)(工作队列)
工作队列 在第 一个教程中, 我们编写了用于从命名队列发送和接收消息的程序。 在这一个中,我们将创建一个 工作队列 ,用于在多个工作人员之间分配耗时的任务。 工作队列(又名: 任务队列 ) 背后的主要思想 是避免立即执行资源密集型任务,必须等待完成。 相反,我们安排稍后完成任务。 我们把一个 任务 封装 成一个消息并发送给一个队列。 在后台运行的工作进程将弹出任务并最终执行作业。 当你运行许多工人时,任务将在他们之间共享。 这个概念在Web应用程序中特别有用,在短的HTTP请求窗口中不可能处理复杂的任务。 默认情况下,RabbitMQ将按顺序将每条消息发送给下一个使用者。 平均而言,每个消费者将获得相同数量的消息。 这种分发消息的方式称为循环法(round-robin)。 试试三个或更多的工人。 消息确认 做任务可能需要几秒钟的时间。 你可能会想知道如果其中一个消费者开始一个长期的任务,并且只是部分完成而死亡会发生什么。 使用我们当前的代码,一旦RabbitMQ向客户发送消息,立即将其标记为删除。 在这种情况下,如果你杀了一个工人,我们将失去刚刚处理的信息。 我们也将失去所有派发给这个特定工作人员但尚未处理的消息。 但我们不想失去任何任务。 如果一名工人死亡,我们希望将任务交付给另一名工人。 为了确保消息永不丢失,RabbitMQ支持 消息 确认 。 消费者发回确认(告知