0

当满足某些条件时,我想安排一个工人在 5 分钟内运行一个特定的工作。问题是,如果再次满足相同的条件,我想检查是否有计划运行。如果有这样的工人计划运行,那么,我不想再次入队,但如果没有,它应该排队。我希望你们明白我想要做什么。可以实现吗?如果是,如何?

4

2 回答 2

2

听起来您想使用或实现一个简单的持久锁。使作业入队的代码可以首先检查锁的可用性,如果可用则获取并入队,如果没有则跳过。入队的作业可以负责释放锁。您需要考虑失败,例如添加锁定超时。redis-mutex gem 可能是这个想法的有用实现。

于 2012-09-28T02:56:34.223 回答
1

最佳实践促进了幂等的工作。这意味着您应该以这样一种方式编写它们,即多次运行它们应该是安全的。任何后续调用都不会更改第一次调用的结果。您可以通过编写进行适当检查并采取相应措施的逻辑来实现这一点。由于您没有提供有关您的工人的工作的描述,因此我不能更具体。

例如,这里是 Sidekiq 常见问题解答的链接:让您的工作人员具有幂等性和事务性

这种方法的好处是您正在使用调度工作人员的方便抽象,而不是与之抗争。

于 2012-10-02T04:02:57.823 回答