c# - 一个队列上的多个 Azure Webjob 实例(第 2 部分)

标签 c# azure azure-webjobs

我正在寻找一些有关如何设置处理单个队列的 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...
}

最佳答案

使用 QueueTrigger 的 WebJobs(和 Azure Functions)将为您处理队列消息可见性,并在处理消息时立即隐藏消息。这有效地锁定了它,防止其他工作人员在给定的时间间隔内获取它(如果您的函数失败,它不会立即将其从队列中删除)。成功完成函数调用后,它将被删除。 QueueTrigger 是否来自单个函数的多个实例或多个不同函数都访问同一队列并不重要。因为它们立即“隐藏”它们拉取的消息,所以尝试轮询队列的另一个进程将看不到那些正在积极处理的消息。队列本身不知道有多少不同的作业/功能正在尝试访问它——它只是管理消息及其可见性。简而言之,你很安全。

关于c# - 一个队列上的多个 Azure Webjob 实例(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155131/

相关文章:

c# - Ffmpeg 在解码时卡住

c# - 通过将函数名称作为字符串传递来动态调用任何函数

c# - 由于 HttpModule 导致 AJAX 中断,如何阻止它发生?

azure - 如何将环境特定值传递给Azure管道?

azure - SQL 数据库 (Paas) 中有没有办法从 Azure 存储队列插入或查看消息?

c# - Azure 服务总线监听器打开太多 TCP 连接(耗尽)

c# - 是否可以通过 WMI 获取 Cluster -> Availability Group Instance Node Map?

azure - 使用 botframework 在聊天机器人中发送图片

azure - 如何在 Azure Functions 中对 HTTP POST 执行模型绑定(bind)?

azure-webjobs - 无法安排 azure webjob