ServiceStack/Redis MQ中排队“延迟执行”消息的推荐方法是什么?

6
我希望将消息排队以便在经过一定时间后(即达到执行的最小日期/时间),或在消息处理时推迟其执行到稍后的时间点(例如未满足某些先决条件),进行处理。示例:事件发生后,定义需要在初始事件时间后至少1小时运行的进程。是否有内置/建议模型可使用https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-Redis来编排此操作?

1
你解决了这个问题吗?我在看类似的东西。我在考虑每隔x秒运行一个定时任务来轮询队列。 - Neil
不完全是。看起来它不被支持,而我已经在尝试使用MassTransit,所以我开始使用带有Quartz集成的MassTransit(由MongoDB作业存储支持)。目前工作得非常好。 :) - JesseP
尼尔,你有什么进展吗?当使用Redis和ServiceStack看起来如此接近时,我不想再维护另一个整个技术。 - richardwhatever
也许@mythz对此有意见? - richardwhatever
2个回答

2
我可能会采用两步法来构建这个系统。
  1. 将任务排入您的队列系统中,该系统将将其处理到持久性存储器:SQL Server、MongoDB或RavenDB中。

  2. 有一个服务轮询您的“排队”任务,以确定何时应将它们重新插入队列。

这可能是最安全的方法,因为您不希望失去这些工作。
如果您使用 RabbitMQ 而不是 Redis,您可以使用 Dead Letter Queues 来获得相同的行为。Dead letter queues 本质上是过期消息的捕手。
因此,您将消息推入一个队列中,没有意图处理它们,并且它们具有特定的过期时间(以分钟为单位)。当它们过期时,它们会弹出到您将要处理的队列中。这是一种很棒的将事物排队等待处理的方式。

我认为需要采用两步方法。我已经从之前的实现中构建了这些内容,只是好奇是否可以将其删除或必须保留。感谢您提供的想法。 - JesseP


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接