繁体   English   中英

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

[英]Multiple Azure Webjob instances on one queue (part2)

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

但是,我想知道如果我创建一个重复的、单独的应用程序服务(每个服务具有相同的 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 是来自单个函数的多个实例,还是来自访问同一队列的多个不同函数,这并不重要。 因为它们立即“隐藏”了它们拉出的消息,所以另一个尝试轮询队列的进程将看不到那些正在被积极处理的消息。 队列本身不知道有多少不同的作业/功能试图访问它——它只是管理消息及其可见性。 简而言之,你很安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM