RabbitMQ - 发送任务的infintie循环

时间:2016-05-13 09:49:29

标签: php rabbitmq

我有一个工作的RabbitMQ服务器,但我只是坚持一件事。

我有一个MySQL表,现在是一行。但是处理完每一行都有新的行(大约20个新行,其中1行已处理)。

如何编写一个无限运行的制作人并逐行处理几个小时直到我阻止他?

我认为制片人会因超时而死,对吧?

如何在条件下写?因为如果我尝试这样的话,它不会影响在处理时添加的行。

$sql = "SELECT columns FROM `table`";
$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_assoc($result)) {
}

我知道,另一个解决方案是CRON工作,但它对我来说并不理想,因为我在Windows上运行它,而任务调度程序只允许重复5分钟。不能少。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果每行处理产生更多行,则算法永远不会终止。我想你应该有终止条件。

在邮件系统上,您应该拥有生产者和消费者。生产者明确地向RabbitMQ发送消息,你应该只配置消费者,当消息准备好被处理时,消费者将被自动调用。

在您的邮件中,您应该拥有要处理的行的ID。您的消费者只需处理此行,可能会创建新行,为新行发送消息并终止。将为新消息调用消费者。

当没有更多消息需要处理时,您的全局处理将终止。

如果在短时间内生成许多消息,则管理消息的方式允许在多个服务器之间进行负载平衡。