一个队列上的多个 Azure Webjob 实例(第 2 部分)
Multiple Azure Webjob instances on one queue (part2)
我正在寻找有关如何设置处理单个队列的 Azure webjob 的多个实例的文档。我看到这篇文章:Multiple Azure Webjob instances on one queue,很有帮助。我最大的收获是,如果我将我的应用程序服务扩展到多个实例,"Each job instance will pick a different message from the queue." 那很好,它确保我的工作不会被重复。
但是,我想知道如果我创建一个重复的、单独的应用程序服务(每个都有相同的 Web 作业)并且 运行 同时创建这两个(或更多)实例是否也是如此只是 "scaling out"。这样做的原因很简单,因为我需要更多的出站 IP 地址。我的 Web 作业消耗的第三方 api 通过 IP 地址限制了我。因此,随着我的应用程序获得更多用户,我 "scale out",我开始从第三部分 API 获得越来越多的超时。我建议的解决方案是创建本质上是克隆的单独应用程序服务。但我想确保来自队列的作业不会重复。
作为参考,这是我的 Web 作业函数的样子:
public void ProcessQueueMessageAsync([QueueTrigger("quicktransferqueue")] string message, ILogger logger)
{
var model = Newtonsoft.Json.JsonConvert.DeserializeObject<QuickTransferModel>(message);
//Hit my third-party API here...
}
使用 QueueTrigger 的 WebJobs(和 Azure Functions)将为您处理队列消息可见性,并在处理消息时立即隐藏消息。这有效地将它从其他工作人员中锁定给定的时间间隔(如果您的函数失败,它不会立即将其从队列中删除)。成功完成函数调用后,它将被删除。 QueueTrigger 是来自单个函数的多个实例还是来自访问同一队列的多个不同函数并不重要。因为他们立即 "hide" 他们拉取的消息,所以尝试轮询队列的另一个进程将看不到那些正在积极处理的消息。队列本身并不知道有多少不同的 jobs/functions 试图访问它——它只是管理消息及其可见性。简而言之,你很安全。
我正在寻找有关如何设置处理单个队列的 Azure webjob 的多个实例的文档。我看到这篇文章:Multiple Azure Webjob instances on one queue,很有帮助。我最大的收获是,如果我将我的应用程序服务扩展到多个实例,"Each job instance will pick a different message from the queue." 那很好,它确保我的工作不会被重复。
但是,我想知道如果我创建一个重复的、单独的应用程序服务(每个都有相同的 Web 作业)并且 运行 同时创建这两个(或更多)实例是否也是如此只是 "scaling out"。这样做的原因很简单,因为我需要更多的出站 IP 地址。我的 Web 作业消耗的第三方 api 通过 IP 地址限制了我。因此,随着我的应用程序获得更多用户,我 "scale out",我开始从第三部分 API 获得越来越多的超时。我建议的解决方案是创建本质上是克隆的单独应用程序服务。但我想确保来自队列的作业不会重复。
作为参考,这是我的 Web 作业函数的样子:
public void ProcessQueueMessageAsync([QueueTrigger("quicktransferqueue")] string message, ILogger logger)
{
var model = Newtonsoft.Json.JsonConvert.DeserializeObject<QuickTransferModel>(message);
//Hit my third-party API here...
}
使用 QueueTrigger 的 WebJobs(和 Azure Functions)将为您处理队列消息可见性,并在处理消息时立即隐藏消息。这有效地将它从其他工作人员中锁定给定的时间间隔(如果您的函数失败,它不会立即将其从队列中删除)。成功完成函数调用后,它将被删除。 QueueTrigger 是来自单个函数的多个实例还是来自访问同一队列的多个不同函数并不重要。因为他们立即 "hide" 他们拉取的消息,所以尝试轮询队列的另一个进程将看不到那些正在积极处理的消息。队列本身并不知道有多少不同的 jobs/functions 试图访问它——它只是管理消息及其可见性。简而言之,你很安全。