我有一个多租户天蓝色应用程序,他们可能排队等待很多不同的工作。每个作业都包含许多存储在队列中的单个任务。
由于用户原因和技术原因,特定的工作不应该消耗太多的工作:
用户:不希望用户被困在一项长期无法取得进展的大工作中 技术:处理任务涉及到在网络上点击一些有限的资源,你只能说10个同时连接,但你可能有数千个最终需要连接的任务。
为了使它变得更复杂,一些工作“相关”,因为它们将消耗相同的资源,因此10个工人的限制应该跨越这些工作
目前我们正在为每个作业使用单独的队列,这可以正常运行,但是我们必须创建它们并在运行中清理它们,并且有一个队列队列供工作人员找到合适的队列
此外,这使得很难/不可能完成相关的工作。
这有一个好的设计模式吗?
答案 0 :(得分:0)
这是您可能希望考虑的设计模式。它通过使用单个队列支持体系结构简单性和低成本,并通过排队所有任务来故障转移安全性。
对所有邮件使用单个队列。有关工作人员限制和支持多种消息类型的队列的想法,请参阅此条目(包括我的答案)。 How to read from multiple queues in real-world?
您已将流程描述为多个作业,每个作业都有多个任务。
通过将作业(消息)添加到队列来进行队列化。
作业消息处理器执行第一个任务,添加后续任务 (消息)到队列然后删除初始作业(消息)。 这种模式将确保工作/任务永远不会丢失 机器回收。 (假设并要求你的所有任务都是 幂等)。
后续的任务处理器基本上做同样的事情,直到 没有更多的任务。
如果任务需要更多时间,则队列消息可见性为 超时,不断延长能见度 参考:Is it possible to change an Azure queue message invisibility timeout without posting the data?