2017-04-17 13 views
1

現在私はasp.netを使用してWebApiプロジェクトに取り組んでいます。私は、迅速かつ簡単に私のAPIを維持するために、webjobsにすべての非タイムクリティカルで長期的な操作を移動したい。多くのQueueTrigger悪い練習でAzure WebJobs?

たとえば、特定のリソースを作成すると、即座に作成され(エンティティステータス:作成/プロビジョニング)、新しいキューメッセージがエンキューされます。これで、Webジョブはキュー上のメッセージを受け取り、プロビジョニングタスクから開始します。ジョブが成功または失敗した後、リソース/エンティティが更新されます(ステータス:完了/失敗)。

何も特別なことはありません。しかし今、私は、現時点で計算され、計算されたジョブに、統計やレポートを実現するような部品を動かしたいと思っています。

私は別々のキューでwebjobsに時間が重要ではないが、これらすべてのタスク、たとえば移動:

ProvisioningQueue UpdateStatisticsA CreateReportB ...

そう持っている悪い習慣です一度に多くのキュー(20-50)(それらはすべて常にポーリングされ/チェックされます)。分かりやすくするために、メッセージごとのキュー。悲しいことに、私は、同じキューを聴いている異なるジョブ・ファンクションを作成する方法/例を見つけられませんでした。また、私は何も良い/悪い多くのキューを使用することについては見つかりませんでした。 1-3のジョブ機能を持つ例のみ(画像変換、サイズ変更など)。

紺碧のサービスバスも(トピックのため)良い音です。私はwebjobsとストレージのキューを使って、正しいか良い方法を行っているか分かりません。私が望むのは、webapiから多くの時間がかからず、長時間実行されているタスクを切り離すことです。

ありがとうございました!

答えて

1

複数のキューを使用する場合は、処理する必要のある別々のメッセージタイプを持つキューで問題はありません。

これらのキューからメッセージを処理する方法は2つあります。すべてのキュー監視メソッドを1つのWebジョブにスローするか、各キューのモニタを別々のWebジョブに分割します。私は個人的には、キューモニターを別々のWebジョブに分割するのが好きです。なぜなら、Webjobを必要に応じて別々のWebアプリケーションに移動できるからです。たとえば、キュ​​ーA、B、Cを監視しているWebJob A、B、およびCがあるとします.Aには常に負荷の高いワークロードがあり、BとCは常に軽くロードされていれば、Aを別のWeb別のApp Service Planのアプリケーションで、BとCはWeb Appを共有することができます。これはマイクロサービスのアプローチの一種です。

トピックはこの状況では役に立ちません。

サービスバスは、最低1回、最大で一回の配送を保証する必要があります。また、異なるメッセージタイプを保持する1つのService Busキューを簡単に持つことができます(このようにしたい場合)。 BrokeredMessageクラスインスタンスを介してService Busでメッセージを送信します。 BaseMessageクラスを作成し、メッセージタイプごとにBaseMessageをサブクラス化し、JSON(または使用するフォーマット)にシリアル化してメッセージをBrokeredMessageでパッケージ化し、デキュー操作中にどのサブクラスを使用するかをテストできます。

+0

詳細な回答ありがとうございます。現在、私は分離されたwebjobプロジェクトを持っており、それは分離されたwebappとサービスプランに配備されています。今のところ私は同じ仕事にすべてを入れるための道を進み、必要に応じて、負荷が上がるとすぐに上記のような複数の仕事のプロジェクトに単一の仕事のプロジェクトをリファクタリングします。 – essmd

関連する問題