2017-10-13 15 views
2

.NET COREコンソールアプリケーションを作成し、Azureアプリケーション(ASP.NETコア)に連続モードWebジョブとしてアップロードしました。 webjobを実行すると、webappはAPI要求(リクエスト時間が数秒に上昇)に応答する速度が非常に遅くなります。WebjobがASP.NETコアでパフォーマンスの問題を引き起こしています

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

答えて

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プレビューバージョン.NE T 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

+0

を私は、このコードはネットのフルフレームワークのために有効であると思い、.NETのコアはしていませんまだWebJob SDKをサポートしていません。あなたの答えはWebJob SDKに基づいているようです。 .NET Coreでは、すべてを手動で管理する必要があります。 – tssutha

+0

3.0ベータ版はNet Standard 2.0と互換性があるので、動作するはずです。 – juunas

+0

私は見ていますが、私はまだアプリケーションを.Net Core 2.0にアップデートしていません。実験したところ、バグが修正されるのを待ってEF core 2.0の問題が発生しました。 – tssutha

関連する問題