プロダクションロール<をスワップしようとすると、昨日恐ろしい問題や経験がありました。Windows Azureのステージング<-->プロダクションがテーブルストレージの競合とエラーの原因となる
私たちは、キューからメッセージを拾っworkerroleを持っている:
は、ここに私たちの設定です。これらのメッセージはロールで処理されます。 (テーブルストレージの挿入、dbの選択など)。これは、彼が作る必要があるテーブルストレージポストの数に応じて、キューメッセージごとに1〜3秒かかることがあります。彼はすべてが終わったらメッセージを削除します。
問題スワップ:私たちのステージングプロジェクトは、オンライン当社の生産workerroleを行ってきました
はerroringを開始しました。
ロールがキューメッセージを処理したいとき、定数ストリームに 'EntityAlreadyExists'というエラーが発生しました。これらのエラーのため、キューメッセージは削除されませんでした。これらのキューのメッセージ内を調べ、それらと起こっなるのか分析する場合これは、我々は、彼らが実際に処理が、削除されませんでした見た....キューメッセージがバックキューでバック処理にというように置くことが
を引き起こしました。これらの障害メッセージを削除するときに問題は解決しませんでした。新しくキューメッセージは処理されませんでしたが、まだ処理されず、テーブルストレージレコードが追加されませんでしたが、これは非常に奇妙なものです。再び生産にステージングし、産・出版の両方を削除する場合
は、すべてがうまく動作し始めました。
可能性のある問題(s)は?
我々はlitle 2に実際に何が起こったのか見当がつかない。
- 両方の役割が同じメッセージを受け取り、1つが投稿を行い、1つがエラーになることはありますか?
- ... ???
解決策はありますか?
私たちはこの「問題」を解決する方法についていくつかのアイデアを持っているの。
- 有害メッセージを作成しますが、システム上の失敗しますか?デキューカウントがXを超えると、そのキューメッセージを削除するか、別の 'poisonqueue'に配置するだけです。
- EntityAlreadyExistsエラーをキャッチして、そのキューメッセージを削除するか、別のキューに格納するだけです。
- ... ????
複数の役割
私は複数の役割を置くときに我々は同じ問題を抱えているだろうと仮定?
多くのありがとうございます。
EDIT 24/02/2012 - 追加情報が
- 私たちが実際に値getMessage()を使用し
- キュー内のすべての項目は一意であり、テーブルストレージでユニークなメッセージを生成します。プロセスに関する情報はほとんどありません。ユーザーは何かを投稿し、他の特定のユーザーに配布する必要があります。そのユーザーから生成されるメッセージには、一意のId(guid)が付けられます。このメッセージはキューにポストされ、ワーカー・ロールによって選択されます。メッセージはいくつかの他のテーブルに分配されます(パーティションキー - > UserId、rowkey - >タイムスタンプのティックで&ユニークなメッセージID)。 うちいくつかのメッセージがこれはバッチオプションを使用せずに10〜20のインサートを意味します。10-20テーブルを好きに配布される可能性があるため。あなたが設定またはこの不可視期間を拡大アウト?
- が削除できないのは論理的な説明することができキューメッセージは例外のためとなります。も同様です。
最新のキュー実装では、可視性のタイムアウトを変更できます。 http://msdn.microsoft.com/en-us/library/windowsazure/hh452234.aspx – hocho