1

我有一个多租户天蓝色应用程序,其中可能有许多不同的作业排队。每个作业由许多单独的任务组成,这些任务存储在队列中。

出于用户原因和技术原因,一个特定的工作不应该消耗太多的工作:

用户:不希望用户陷入长期看不到任何进展的庞大工作技术:处理任务涉及访问网络上的一些有限资源,您只能说 10 个同时连接,但您可能有成千上万的任务最终需要这种连接。

为了让它变得更复杂一些,一些工作是“相关的”,因为它们会消耗相同的资源,所以 10 名工人的限制应该跨越这些工作

目前我们为每个作业使用单独的队列,这工作正常,但我们必须创建它们并即时清理它们,并有一个队列让工作人员找到合适的队列

此外,这使得相关工作变得困难/不可能。

有没有一个好的设计模式呢?

4

1 回答 1

0

这是您可能希望考虑的设计模式。它通过使用单个队列来支持架构简单性和低成本,并通过将所有任务排队来实现故障转移安全。

对所有消息使用单个队列。有关支持多种消息类型的工作程序限制和队列的想法,请参阅此条目(包括我的答案)。 如何从现实世界中的多个队列中读取?

您已将您的流程描述为多个作业,每个作业都有多个任务。

  • 通过将作业(消息)添加到队列来排队。

  • 作业消息处理器执行第一个任务,将后续任务(消息)添加到队列中,然后删除初始作业(消息)。这种模式将确保即使在机器回收时也不会丢失作业/任务。(假设并要求您的所有任务都是幂等的)。

  • 随后的任务处理器基本上做同样的事情,直到没有更多的任务。

  • 如果任务花费的时间超过队列消息可见性
    超时,请继续延长可见性。
    参考:是否可以在不发布数据的情况下更改 Azure 队列消息不可见超时?

于 2012-06-23T02:30:46.790 回答