gpt4 book ai didi

Azure webjob - QueueTrigger 停止触发

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

我正在使用推荐的设置运行 azure webjobs SDK 控制台应用程序(连续):

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

我正在运行的 Azure 队列中有大约 6000 条消息,并且我正在本地运行 Web 作业,作为控制台应用程序。

我遇到的问题是,在处理 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 包然后重新运行安装包 Microsoft.Axure.Webjobs 来确保使用所有依赖项的正确版本。我现在使用的是 webjobs 版本 1.1.0,它引入了 Azure 存储版本 4.3。

按照 Matthew 的建议,我已经下载了 azure webjobs 的源代码,以确定进程在哪里卡住。一旦发生卡住,我就会暂停执行并检查正在运行的线程,以查找我认为是 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 的一个实例

该类或其使用方式是否可能存在死锁问题?

一些注意事项:

  • 我正在调试器中运行,因此在本例中我相信文本编写器正在内部转发到控制台
  • 我通过 config.Queues.BatchSize = 1; 将批量大小设置为 1 ,不确定这是否重要

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

更新

问题是我不明白新的 Windows 10 命令提示符是如何工作的。任何时候您单击命令窗口,它都会进入“选择”模式,完全暂停进程的执行。

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

您可以看出它处于这种状态,因为它会在窗口标题前加上“Select”一词:

frozen command window

您必须按 Enter 或再次单击才能再次运行。

所以,最后两条评论:

1)命令窗口的行为是多么令人难以置信的困惑和不直观!

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

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

disable QuickEdit Mode

最佳答案

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

如果您无法解决这个问题,另一个选择可能是克隆 SDK,在本地构建并调试它。 repo is here 。主队列处理循环is here .

关于Azure webjob - QueueTrigger 停止触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863613/

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