我创建了一个.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控制台答案 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