2017-10-13 5 views
2

J'ai créé une application de console .NET CORE et l'ai chargée en tant que travail Web en mode continu dans une application Azure (ASP.NET Core). Avec webjob en cours d'exécution, webapp est très lent à répondre à la demande de l'API (le temps de la demande augmente à quelques secondes).Webjob est à l'origine d'un problème de performances avec le cœur ASP.NET

Code 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) ; 
    } 

Et le traitement de l'opération de message prend quelques secondes.

de console SCM enter image description here

Demande de temps enter image description here

Répondre

3

Le while(true) ; frapperai la CPU donc je vous suggère de ne pas le faire.

Vérifiez l'exemple de traitement des messages de file d'attente pour la bonne façon comment mettre en œuvre la gestion des messages: https://github.com/Azure/azure-webjobs-sdk/wiki/Queues

Vous devrez changer votre Main à:

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

Et vous pouvez faire un gestionnaire de messages dans un autre fichier:

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

les versions 3.0.0 aperçu du support bibliothèque Microsoft.Azure.WebJobs .NE T Standard 2.0, donc il peut être utilisé avec des projets .NET Core 2.0.

Si vous souhaitez implémenter vous-même, vous pouvez vérifier le code source SDK Webjobs pour un exemple comment ils le font: https://github.com/Azure/azure-webjobs-sdk/blob/dev/src/Microsoft.Azure.WebJobs.Host/JobHost.cs

+0

Je suppose que ce code est valable pour .Net cadre complet, de base .NET ne avoir le support de WebJob SDK encore. Votre réponse basée sur WebJob SDK semble être. Avec .NET Core, nous devons tout gérer manuellement. – tssutha

+0

La version 3.0 bêta est compatible avec Net Standard 2.0, donc cela devrait fonctionner. – juunas

+0

Je vais jeter un coup d'oeil, je n'ai pas encore mis à jour l'application .Net Core 2.0, comme nous l'avons expérimenté, nous rencontrons quelques problèmes EF core 2.0, en attendant que les bugs soient corrigés. – tssutha