我想排队等待处理的消息,仅在给定的持续时间过去后(即满足执行的最短日期/时间),和/或在消息的处理时间,将其执行推迟到稍后的时间点(比如不满足某些先决条件检查)。
例如,一个事件发生定义了一个进程,该进程需要在初始事件发生后的 1 小时内运行。
是否有任何内置/建议的模型来使用 https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis 来协调这个?
最佳答案
我可能会分两步构建它。
将任务排队到您的排队系统中,该系统会将其处理到持久性存储中:SQL Server、MongoDB、RavenDB。
让服务轮询您的“排队”任务,以确定何时应将它们重新插入到队列中。
可能是最安全的方式,因为您可能不想失去这些工作。
如果您使用 RabbitMQ 而不是 Redis,您可以使用死信队列来获得相同的行为。死信队列本质上是过期消息的捕获器。
因此,您将消息插入队列而不打算处理它们,并且它们在几分钟内有特定的过期时间。当它们过期时,它们会弹出到您将从中处理的队列中。将事情排队以备后用的非常巧妙的方式。
关于redis - 通过 ServiceStack/Redis MQ 对 "delayed execution"消息进行排队的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450837/