Azure webjob - QueueTrigger 停止触发

Azure webjob - QueueTrigger stops triggering

我是 运行 具有推荐设置的 azure webjobs SDK 控制台应用程序(连续):

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage, TextWriter logger)

我运行反对的天蓝色queue里面有~6000条消息,我运行本地web-job,作为控制台应用程序。

我遇到的问题是在处理 0 到 ~30 条消息后,处理随机停止。控制台保持打开状态,但不再显示控制台消息。

例如,它可能只处理 2 条消息:

Executing: 'Functions.ProcessQueueMessage' - Reason: 'New queue message detected on 'QueueName'.'
Executed: 'Functions.ProcessQueueMessage' (Succeeded)
Executing: 'Functions.ProcessQueueMessage' - Reason: 'New queue message detected on 'QueueName'.'
Executed: 'Functions.ProcessQueueMessage' (Succeeded)

然后,什么都没有。我的互联网连接似乎没有任何问题,我无法将问题追溯到任何特定消息。

有其他人遇到过此 SDK 的问题吗?

更新:

我通过删除 nuget 包然后 re-running install-package Microsoft.Axure.Webjobs 确保我使用了所有依赖项的正确版本。我现在使用的是 webjobs 版本 1.1.0,它引入了 Azure 存储的 4.3 版本。

按照 Matthew 的建议,我已经下载了 azure webjobs 的源代码以确定进程冻结的位置。一旦 freez-up 发生,我暂停执行并检查 运行 线程以寻找我认为是 Microsoft.Azure.WebJobs.Host.CompositeTraceWriter

中的罪魁祸首
    protected virtual void InvokeTextWriter(TraceEvent traceEvent)
    {
        if (_innerTextWriter != null)
        {
            string message = traceEvent.Message;
            if (!string.IsNullOrEmpty(message) &&
                 message.EndsWith("\r\n", StringComparison.OrdinalIgnoreCase))
            {
                // remove any terminating return+line feed, since we're
                // calling WriteLine below
                message = message.Substring(0, message.Length - 2);
            }

            _innerTextWriter.WriteLine(message);
            if (traceEvent.Exception != null)
            {
                _innerTextWriter.WriteLine(traceEvent.Exception.ToDetails());
            }
        }
    }

它冻结的行是第 66 行:_innerTextWriter.WriteLine(message);

_innerTextWriterSystem.IO.TextWriter.SyncTextWriter

的实例

这个 class 或它的使用方式是否可能存在一些死锁问题?

一些注意事项:

我目前正在另一台计算机上设置环境,以便我可以查看它是否可以在本机(surface book)以外的其他地方重现。

更新

问题是我不理解新的 windows 10 命令提示符是如何工作的。任何时候单击命令 window,它都会进入 "select" 模式, 完全暂停进程的执行。

基本上:https://superuser.com/questions/419717/windows-command-prompt-freezing-randomly?newreg=ece53f5584254346be68f85d1fd2f18d

你可以看出它处于这种状态,因为它会在 window 标题前加上单词 "Select":

您必须按回车键或再次单击才能再次运行。

所以,最后两条评论:

1) 命令 window!

的行为令人难以置信的混乱和 un-intuitive

2) 删除这个问题给自己和家人带来的耻辱,希望有管理员能怜悯一下

要摆脱这种奇怪的行为,您可以禁用快速编辑模式:

奇怪。当它处于这种卡住状态时,您是否可以尝试向队列中添加一条新的队列消息,看看是否会触发?您确定您的功能没有在内部挂起吗?您使用的是什么版本的 SDK?您也可以尝试升级到我们上周刚刚发布的 v1.1.0。如果队列中真的有一堆消息等待处理,我想不出有什么会导致这种情况。 SDK 中的队列侦听器应该顺畅运行,并行读取成批消息并将它们分派给您的函数。您是否更改了任何 JobHostConfiguration.Queues 配置旋钮?您没有强制更新 Azure SDK 的版本是否高于 WebJobs SDK 支持的版本?

如果您无法解决这个问题,另一种选择可能是克隆 SDK,在本地构建和调试它。 repo is here. The main queue processing loop is here.