我希望将MySQL用作作业队列。多台机器将生产和消费作业。作业需要进行调度;有些作业每小时运行一次,有些作业每天运行一次等等。
这似乎相当简单:对于每个作业,有一个“nextFireTime”列,并且工作机器会查找具有nextFireTime的作业,将记录的状态更改为“inProcess”,然后在作业结束时更新nextFireTime。
问题在于当工作机器默默死亡时。它将无法更新nextFireTime或将状态设置回“idle”。
不幸的是,作业可能运行时间很长,因此无法使用查找已经处理了太长时间的作业的收割线程。没有适合的超时值。
有人能否建议一种设计模式,以正确处理不可靠的工作机器?
这似乎相当简单:对于每个作业,有一个“nextFireTime”列,并且工作机器会查找具有nextFireTime的作业,将记录的状态更改为“inProcess”,然后在作业结束时更新nextFireTime。
问题在于当工作机器默默死亡时。它将无法更新nextFireTime或将状态设置回“idle”。
不幸的是,作业可能运行时间很长,因此无法使用查找已经处理了太长时间的作业的收割线程。没有适合的超时值。
有人能否建议一种设计模式,以正确处理不可靠的工作机器?