一个队列上有多个Azure Webjob实例(第2部分)

问题描述 投票:0回答:1

我正在寻找有关如何设置处理单个队列的Azure webjob的多个实例的一些文档。我碰到了这篇文章:Multiple Azure Webjob instances on one queue,这很有帮助。我最大的收获是,如果我将应用程序服务扩展到多个实例,则“每个作业实例将从队列中选择一条不同的消息。”太好了,它可以确保我的工作不会重复。

但是,如果我创建一个重复的,单独的应用程序服务(每个应用程序上都有相同的Web作业),然后同时运行这两个(或更多)实例,而不是简单地“向外扩展”,我想知道是否同样如此。这样做的原因仅仅是因为我需要更多的出站IP地址。我的网络作业消耗的第三方api通过IP地址限制了我。因此,随着我的应用程序获得更多用户并“扩展”,我开始从此第三方API获得越来越多的超时。我建议的解决方案是创建本质上是克隆的单独的应用程序服务。但是我想确保来自队列的作业不会重复。

供参考,这是我的网络作业功能的外观:

public void ProcessQueueMessageAsync([QueueTrigger("quicktransferqueue")] string message, ILogger logger)
{
    var model = Newtonsoft.Json.JsonConvert.DeserializeObject<QuickTransferModel>(message);
    //Hit my third-party API here...
}
c# azure azure-webjobs
1个回答
0
投票

WebJobs(和Azure函数)使用QueueTrigger将为您处理队列消息的可见性,并在处理消息时立即隐藏消息。这样可以有效地将它锁定在指定时间间隔内的其他工作程序中(如果您的函数失败,它不会立即将其从队列中删除)。成功完成函数调用后,它将被删除。 QueueTrigger是来自单个函数的多个实例还是都访问同一队列的多个不同的函数无关紧要。因为它们立即“隐藏”了他们提取的消息,所以另一个尝试轮询队列的进程将看不到正在被积极处理的消息。简而言之,您很安全。

© www.soinside.com 2019 - 2024. All rights reserved.