2012-09-27 26 views
0

当某些条件得到满足时,我想安排一名工人在5分钟内完成一项特定工作。问题是,如果再次遇到相同的条件,我想检查是否有计划要运行的东西。如果有这样一个工人计划跑,那么,我不想再入队,但如果没有,它应该排队。我希望你们明白我想要做的事情。它可以实现吗?如果是,如何?如何从我的代码中检查Sidekiq中是否有东西入队?

回答

2

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

+0

非常感谢,这对我真的很有用 –

1

最佳实践可以促进幂等的工作。这意味着你应该以这样的方式编写它们,以便多次运行它们应该是安全的。任何后续的呼叫都不会改变第一个呼叫的结果。通过编写适当检查的逻辑来实现这一点,并相应地采取行动。既然你没有提供你的工作者的描述,我不能更具体。

举一个例子,这里是对Sidekiq的常见问题解答的链接:Make your workers idempotent and transactional

这种方法的好处是,你沿着预定工人的便利抽象打,而不是反对它的战斗。

相关问题