当满足某些条件时,我想安排一名工人在5分钟内完成一项特定的工作。问题是,如果再次满足相同的条件,我想检查是否有计划运行的东西。如果有这样的工人计划运行,那么,我不想再次入队,但如果没有,则应该排队。我希望你们明白我要做的事情。可以实现吗?如果是,怎么样?
答案 0 :(得分:2)
听起来你想使用或实现一个简单的持久锁。排队作业的代码可以首先检查锁的可用性,获取和排队(如果可用),如果没有,则跳过。排队的工作可以负责释放锁。您需要考虑失败,例如添加锁定超时。 redis-mutex gem可能是这个想法的有用实现。
答案 1 :(得分:1)
最佳实践促进了幂等的工作。这意味着您应该以这样的方式编写它们,以便多次运行它们应该是安全的。任何后续调用都不会更改第一次调用的结果。您可以通过编写执行正确检查的逻辑来实现此目的,并采取相应的措施。既然你没有提供你的工人做什么的描述,我就不能更具体了。
例如,以下是Sidekiq常见问题解答的链接:Make your workers idempotent and transactional
这种方法的好处在于,您可以方便地抽取预定的工作人员,而不是与之作斗争。