Webjob导致ASP.NET核心性能问题

时间:2017-10-13 07:42:03

标签: azure asp.net-core .net-core azure-webjobs

我创建了一个.NET CORE控制台应用程序,并作为连续模式webjob上传到Azure应用程序(ASP.NET Core)。随着webjob的运行,webapp响应API请求的速度很慢(请求时间上升到几秒钟)。

WebJob代码

static void Main(string[] args)
        {
queueClient.RegisterMessageHandler(
                async (message, token) =>
                {

                    // Process the message                    
                    // Complete the message so that it is not received again.
                    // This can be done only if the queueClient is opened in ReceiveMode.PeekLock mode.
                    await queueClient.CompleteAsync(message.SystemProperties.LockToken);


                },
                new MessageHandlerOptions(exce => {
                    return Task.CompletedTask;
                })
                { MaxConcurrentCalls = 1, AutoComplete = false });
            //Console.ReadKey();
            while (true) ; 
    }

处理消息操作需要几秒钟。

从SCM控制台

enter image description here

请求时间 enter image description here

1 个答案:

答案 0 :(得分:3)

while(true) ;将固定CPU,因此我建议您不要这样做。

检查队列消息处理示例,了解如何实现消息处理的正确方法:https://github.com/Azure/azure-webjobs-sdk/wiki/Queues

您必须将Main更改为:

static void Main(string[] args)
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}

然后你可以在另一个文件中创建一个消息处理程序:

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage, TextWriter logger)
{
    logger.WriteLine(logMessage);
}

Microsoft.Azure.WebJobs库的3.0.0预览版支持.NET Standard 2.0,因此可以与.NET Core 2.0项目一起使用。

如果您想自己实现它,可以查看Webjobs SDK源代码,了解它们是如何实现的:https://github.com/Azure/azure-webjobs-sdk/blob/dev/src/Microsoft.Azure.WebJobs.Host/JobHost.cs