我想使用 MySQL 作为作业队列。多台机器将生产和消耗工作。需要安排工作;有些可能每小时运行,有些每天运行,等等。
看起来相当简单:对于每个作业,都有一个“nextFireTime”列,让工作机器使用 nextFireTime 搜索作业,将记录的状态更改为“inProcess”,然后在作业结束时更新 nextFireTime。
当一个工人默默地死去时,问题就出现了。它将无法更新 nextFireTime 或将状态设置回“空闲”。
不幸的是,作业可能会长时间运行,因此无法选择寻找已在进程中时间过长的作业的 reaper 线程。没有超时值可以工作。
任何人都可以建议一种可以正确处理不可靠工作机器的设计模式吗?