我有一组按优先级排列的 Resque 队列。对于最低优先级队列中的所有作业,它们没有参数,并且稍后的运行将取代任何先前的运行——例如,它们正在与外部服务同步数据。因此,使用这些作业的多个副本创建积压是没有意义的——连续运行 3 次不会增加任何价值。
但是在忙碌期间,我们确实会积压(仅在此队列上),因为工作人员忙于更高优先级的工作。
我可以通过首先阻止冗余作业排队来防止这种积压吗?
我有一组按优先级排列的 Resque 队列。对于最低优先级队列中的所有作业,它们没有参数,并且稍后的运行将取代任何先前的运行——例如,它们正在与外部服务同步数据。因此,使用这些作业的多个副本创建积压是没有意义的——连续运行 3 次不会增加任何价值。
但是在忙碌期间,我们确实会积压(仅在此队列上),因为工作人员忙于更高优先级的工作。
我可以通过首先阻止冗余作业排队来防止这种积压吗?
是的,有宝石可以做到这一点。(AFAICT,它们通过使用参数列表对作业类进行哈希处理,并在 Redis 中分别维护一组“已入队的键”。)
请参阅https://github.com/resque/resque-loner和https://github.com/neighborland/resque_solo。