我有一个工作的RabbitMQ服务器,但我只是坚持一件事。
我有一个MySQL表,现在是一行。但是处理完每一行都有新的行(大约20个新行,其中1行已处理)。
如何编写一个无限运行的制作人并逐行处理几个小时直到我阻止他?
我认为制片人会因超时而死,对吧?
如何在条件下写?因为如果我尝试这样的话,它不会影响在处理时添加的行。
$sql = "SELECT columns FROM `table`";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_assoc($result)) {
}
我知道,另一个解决方案是CRON工作,但它对我来说并不理想,因为我在Windows上运行它,而任务调度程序只允许重复5分钟。不能少。
提前致谢。
答案 0 :(得分:0)
如果每行处理产生更多行,则算法永远不会终止。我想你应该有终止条件。
在邮件系统上,您应该拥有生产者和消费者。生产者明确地向RabbitMQ发送消息,你应该只配置消费者,当消息准备好被处理时,消费者将被自动调用。
在您的邮件中,您应该拥有要处理的行的ID。您的消费者只需处理此行,可能会创建新行,为新行发送消息并终止。将为新消息调用消费者。
当没有更多消息需要处理时,您的全局处理将终止。
如果在短时间内生成许多消息,则管理消息的方式允许在多个服务器之间进行负载平衡。