2

WebApi アプリケーションからの処理を分散するために、 Azure Service Bus キュー メッセージをリッスンする Windows サービスがあります。さらに、定期的なタスク (毎晩/毎週) を処理する必要がありますが、これは同じシステムを使用して処理するのが最適であると考えていました。

たとえば、毎日深夜に古い DB ノードを削除する「CleanupDb」のキューがあるとします。

var client = QueueClient.Create("CleanupDb");
var options = /* ... */

client.OnMessage((message) => {
    client.Send(new BrokeredMessage() {
        ScheduledEnqueueTimeUtc = DateTime.Today.AddDays(1)
    });

    // do DB Cleanup
}, options)

理論的にはこれでうまくいくはずですが、これを処理するより明白な方法が欠けているように感じます。より良い方法はありますか?

4

1 に答える 1

1

はい、これは機能しますが、1 日に 1 回起動するような場合には、このアプローチはお勧めしません。これで私が見る問題は次のとおりです。

  • かなり健全なバックオフ ポリシーを提供したとしても、トランザクションを消費したり、ほぼ常に空のキューに対して接続を維持したりする可能性があります。これは資源の浪費だと思います。
  • このサービスをホストしているものがダウンすると、操作は処理されません。
  • 処理のためのメッセージが翌日のキューに入れられないことを意味する例外が発生する可能性があります。

Thiago は、上記のコメントでオプションとして Azure WebJob を実行することについて言及しましたが、私もそれに同意します。スケジュールを設定して、必要になるまで他のリソースを使用しないようにすることができます。もう 1 つのオプションは、特に Azure Web サイトをまだホストしていない場合は、Azure Automation を検討することです。これは、毎日のスケジュールでは問題なく動作するはずです (長時間実行されるタスクが中断される可能性があるため、Azure WebJob としてより適切に機能する可能性があることを理解してください)。 .

于 2015-02-14T03:14:42.420 に答える