我目前正试图弄清楚如何有效地安排未来的任务,但只有在满足某些条件时。我正在计划一个新项目,因此没有锁定特定技术,但我很可能会使用像RabbitMQ这样的队列。
我将构建的系统将在一个不同的帐户中包含大量数据,每个帐户可以设置不同的规则和操作,以便在满足某些条件时发生。
E.g。如果field1 ='abc'和field2>,请执行X 200
直接规则当然非常简单,但是如果它变为'如果field1 ='abc'并且field2>则在3天内执行X. 200'然后变得更难,理想的解决方案不会浮现在脑海中。
当数据更改且规则匹配时,我可以向队列添加延迟消息,以便在3天后释放消息。这将是非常有效的,没有轮询等...问题是如果在此期间数据发生变化且规则不再匹配,我不希望该行动发生。
此外,规则可以匹配,然后更改数据以使规则不再匹配,然后数据再次更改,以便再次匹配。这应该重置3天,但它排除了在延迟消息被释放时双重检查规则。
我可以存储数据的所有更改的历史记录(我可能正在进行此操作),但是当发布延迟的消息时,通过所有更改来检查规则是否在所有情况下都匹配可能是昂贵的。
看起来我可能需要使用数据库驱动的队列,并且当数据更改时将规则重新应用于每个被延迟的消息,并在它们停止匹配时删除它们。
然而,这种事情必须出现在广泛的应用程序中,我想知道在数据继续匹配规则时是否有更好的方法来执行延迟消息。