我正在使用azure web作业从队列中提取消息并按如下所示进行处理:
namespace TicketProcessor
{
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("ticketprocessorqueue")] string message, TextWriter log)
{
//DO STUFF HERE...
}
}
}
并且此web作业存在于我的azure帐户中的应用服务中。我的音量一直在稳步增加,现在我需要“扩大规模”。我需要这个web作业同时在多个实例上运行。原因有二:
-
更强大的处理能力
-
我的服务针对的是一个web api,它根据ip进行调节
我在我的应用服务中看到了“扩展”的选项。但我不确定消息队列的内部工作方式,因为它与扩展有关。我特别关心的是:
如果我将此应用程序服务扩展到2个实例,并且我的web作业同时在这两个实例上运行(如上所示),队列中的每条消息将被处理两次(每个实例一次)吗?
或者azure队列机制处理它的方式是让两个实例中的一个只处理一次每条消息?
还有一件事需要考虑——在阅读本文时,我发现azure中有两种类型的队列(存储队列和服务总线队列)。我发现有件事很有趣
docs
(在“基本功能”一节中)存储队列的传递保证是“至少一次”。但服务总线队列的交付保证是“至少一次”和“最多一次”。这个
似乎
指示如果我的进程在服务总线队列中运行,则它保证只运行一次。但如果它在存储队列中运行,则可能会运行多次。在我的例子中,我用一个存储队列运行它。这方面的任何澄清都会有帮助。