azure queuetrigger 中的单身人士无法按预期工作

singleton in azure queuetrigger not working as expected

我的理解显然是错误的,任何澄清都会有所帮助。

我认为将 [Singleton] 添加到 Web 作业会迫使它一个接一个 运行。 好像不是这样。

这是我非常基本的测试代码(针对包含大约 149 条消息的队列)

      [Singleton] //just run one at a time
    public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
    {
        monitorEntities mDb = new monitorEntities();

        //go get the record
        int recordToGet = Convert.ToInt32(message);
        var record = (from r in mDb.To_Process where r.Id == recordToGet select r).FirstOrDefault();

        record.status = 5;
        mDb.SaveChanges();

        Console.WriteLine($"Finished record {message}");
    }

当它 运行s 我在控制台上得到这个:

当我逐步执行时,我遇到了冲突错误。

我哪里不明白?

已解决 - 更多信息

这是我为解决这个问题所做的工作,就像 Haitham 在他的回答中所说的那样 [Singleton] 指的是 webjob 本身有多少个实例 运行ning -- 而不是每个实例处理了多少个项目。

这是通过修改我的 Main 来解决的:

 static void Main(string[] args)
    {
        var config = new JobHostConfiguration();
        config.Queues.BatchSize = 2;

设置为 1 时,一次只能 运行 1 个。 当设置为 2 像上面然后修改下面的代码:

 public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
    {
        var threadID = Thread.CurrentThread.ManagedThreadId;

        Console.WriteLine($"{threadID} : started record {message}");

产生这种行为(这是预期的):

Link 我在上面找到文档的地方:

https://github.com/Azure/azure-webjobs-sdk/wiki/Queues#config

Singleton 并不意味着它会 运行 它一个接一个,主要是实例化 web 作业的实例 class.

如果您需要一次 运行 一个,您可以对静态变量使用锁来防止代码执行多次。 但无论如何我都不建议这样做,你必须看看为什么会出现冲突错误