7

シナリオ:は、複数のAzureのWorkerロールのポーリング同じキューがデッドロックを起こしたりしポイズンメッセージ

私は、複数のワーカーの役割または複数のスレッド、Azureキューでポーリングし、新しいメッセージを持つONE Workerロールをスピンオフした場合。

これは正しい設計アプローチであるかどうか確認してください。私が多くの労働者の役割を持ちたいのは、PROCESSJOBをスピードアップすることです。私たちのアプリケーションはリアルタイムに近いものでなければなりません。つまり、メッセージを受け取ったらすぐに複雑なビジネスルールを適用し、AZURE DBにコミットする必要があります。私たちは3分あたり11,000メッセージを期待しています。

ありがとうございます。

答えて

16

あなたは好きなだけ多くのキューリーダーを持つことができます。ワーカー・ロール・インスタンスは、すべて同じキューから読み取ることができるため、作業スループットが大幅に向上します。

キューメッセージを読むと、他の人が同じ作業を読んでやるのを防ぐために、キューメッセージは一定期間表示されません。メッセージの所有者は、期限が切れる前にメッセージを削除する必要があります。そうしないと、メッセージは再び表示され、元のリーダーがメッセージを削除しようとすると例外がスローされます。これはあなたの操作が冪等でなければならないことを意味します。

各メッセージにデキューカウントがあるため、直接の毒メッセージ処理はありませんが、実装は簡単です。それをチェックして、毒のメッセージを3〜4回読んだ後に取り除くだけです。時間ウィンドウが短すぎるために処理が失敗する可能性があるため、デキューカウントに基づいてタイムアウト期間を動的に調整することもできます。

DequeueCountの場合はMSDN documentationです。

EDIT:3分で11,000メッセージを処理する限り、キューのスケーラビリティターゲットは 2,000 TPS、または3分で360,000トランザクション(メッセージ要件11,000をはるかに上回ります)です。一度に複数のメッセージを読むだけでなく、メッセージを1つのキューメッセージにまとめて処理することで、処理速度をさらに向上させることができます。キューのApproximateMessageCountプロパティを調べて、キューがバックアップされているかどうかを確認してから、キュー項目を消費するのに役立つ追加の機能にスケールアウトすることもできます。

+0

詳細は@David Makogonありがとうございます。感謝します。 –

関連する問題