gpt4 book ai didi

c# - 在 Azure 中扩展应用程序服务时,是否会在所有实例上处理单个消息(来自队列)?

转载 作者:行者123 更新时间:2023-12-02 23:18:14 26 4
gpt4 key购买 nike

我正在使用 Azure Web 作业从队列中提取消息并对其进行处理,如下所示:

namespace TicketProcessor
{
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("ticketprocessorqueue")] string message, TextWriter log)
{
//DO STUFF HERE...
}
}
}

此 Web 作业存在于我的 Azure 帐户的应用服务中。我的数量一直在稳步增加,现在我需要“横向扩展”。我需要这个相同的网络作业同时在多个实例上运行。造成这种情况的原因有两个:

  1. 更强的处理能力
  2. 我的服务针对的是根据 IP 进行限制的 Web API

我在我的应用服务中看到“横向扩展”选项。但我不确定消息队列的内部工作原理,因为它与横向扩展有关。我特别关心的是:如果我将此应用程序服务扩展到 2 个实例,并且我的 Web 作业在两个实例上运行(如上所示),队列中的每条消息是否会被处理两次(每个实例一次)? 或者 Azure 队列机制是否以这样的方式处理它:每条消息仅由两个实例之一处理一次?

还有一件事需要考虑 - 在阅读本文时,我发现 Azure 中有两种类型的队列(存储队列和服务总线队列)。我在 docs 中发现有趣的一件事(在“基础功能”部分)是存储队列的交付保证是“至少一次”。但服务总线队列的交付保证是“至少一次”和“最多一次”。这似乎表明,如果我的进程在服务总线队列中运行,那么它保证只运行一次。但如果它在存储队列中运行,它可能会运行多次。就我而言,我使用存储队列运行它。对此的任何澄清都会有所帮助。

最佳答案

If I scale this app service out to 2 instances, and my web job runs on both (as shown above), will each message in the queue get processed twice (once on each instance)?

你的问题的答案是否定的。每条消息只会被处理一次。从这里link (“多个实例”部分):

If your web app runs on multiple instances, a continuous WebJob runs on each machine, and each machine will wait for triggers and attempt to run functions. The WebJobs SDK queue trigger automatically prevents a function from processing a queue message multiple times; functions do not have to be written to be idempotent. However, if you want to ensure that only one instance of a function runs even when there are multiple instances of the host web app, you can use the Singleton attribute.

关于c# - 在 Azure 中扩展应用程序服务时,是否会在所有实例上处理单个消息(来自队列)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55113411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com