3

以前の要求 (SignalR を介してクライアントに送信される) への応答について Service Bus Queue を監視する必要がある Azure Web ロールがあります。

最初は、WebRole.OnStart() でメッセージ ポンプ (QueueClient.OnMessage) を使用したいと考えていました。しかし、私たちは WebJobs SDK を非常に気に入るようになりました。特に、プログラマーが下位レベルの実装やダッシュボードから解放される点が気に入っています。

さまざまな理由から、Web サイトに切り替えるのではなく、Web ロールを維持したいと考えています。Azure Web ロールで WebJobs SDK を使用する方法は? ちょっとした実験で、WebRole.cs の Web ロールの OnStart() を次のように調整しました。

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        JobHostConfiguration config = new JobHostConfiguration()
        {
            ServiceBusConnectionString = "...", 
            StorageConnectionString = "...",
            DashboardConnectionString = "..."
        };

        JobHost host = new JobHost(config);
        host.RunAndBlock();

        return base.OnStart();
    }

    public static void ProcessQueueMessage([ServiceBusTrigger("MyQueue")] string inputText)
    {
        Trace.WriteLine(inputText);
    }
}

これは問題なく機能しているように見えますが、Web ロールへの影響を評価するのは困難です。結果が生じる可能性はありますか?おそらく、Web ロールのスケーリングでしょうか?

ありがとう。

4

1 に答える 1

3

WebJobs SDK は、WebRole で問題なく動作するはずです。

OnStart実装に関して 1 つの提案があります。メソッドをブロックしないでください。を呼び出す代わりに、 /RunAndBlockを使用します。これはそのメソッドをブロックせず、ジョブ ホスト用に別のスレッドを作成します。StartStartAsync

次のようになります (コンパイルできるかどうかはわかりません)。

public class WebRole : RoleEntryPoint
{
   private JobHost host;

   public override bool OnStart()
   {
       JobHostConfiguration config = new JobHostConfiguration()
       {
           ServiceBusConnectionString = "...", 
           StorageConnectionString = "...",
           DashboardConnectionString = "..."
       };

       host = new JobHost(config);
       host.Start();

       return base.OnStart();
   }

   // Not sure if this is the signature of OnStop
   // or even if this method is called this way
   public override bool OnStop()
   {
       host.Stop();
       return base.OnStop();   
   }

   public static void ProcessQueueMessage([ServiceBusTrigger("MyQueue")] string inputText)
   {
       Trace.WriteLine(inputText);
   }

}

于 2014-10-24T16:28:55.800 に答える