私が知っているのは、作業者がキューからメッセージを処理しないと、再び表示され、これに対して(冪等の)コードを付けなければならないことです。しかし、作業者がメッセージを2回デキューできる可能性はありますか?私の伐採に基づいて、私はこのような行動を見ているように見えますが、なぜその理由がわかりません。私は次のメッセージを手に入れようとする間にメッセージを削除していても、もう一度手に入れたようです。空白のストレージキューからメッセージを2回取得することはできますか?
答えて
デキューできないようにする必要があります。そして、私が物事を正しく思い出すと、2回目のデキューとロック後にポップレシートが変わるので、2度も削除することはできません。
SilverNinjaが示唆しているように、おそらくメッセージが誤って2回キューに入れられていたかどうかを確認したいと思います。
複数のワーカーロールがありますか?
キューアイテムの可視性のタイムアウトが、処理中に何時でも処理が完了する前に終了する可能性があります(特に、処理に時間がかかる)。この場合、別の同じ役割が同じメッセージを受け取る可能性があります(これは効果的に許可する必要があります。同じメッセージが複数回処理されても問題ありません)。
この時点で、最初のロールが終了してメッセージをデキューし、次にタイムアウト後にそれを選択した他のロールが終了し、メッセージをデキューしようとします。私の頭の上から、ロールがデキューされたメッセージをデキューしようとしたときに、正確に何が起こったのかを思い出さない。
はい - 私は2人の労働者のインスタンスを持っています。しかし、私の操作は非常に速く、長時間走っているわけではありません。それはGetMessageとDeleteのようなものです。しかし、上記に基づいて、スケジューリングのバグや可能性が高いです。デキュー時の値にバグがない限り、メッセージが再び見えるようになっているとは思えません。デフォルトでは5分でなければなりませんが、設定を許可します。 – Bryan
はい、同じメッセージを2回デキューできます。これは、2つの理由で発生します。
- ワーカーAのメッセージBおよび不可視タイムアウトが期限切れです。メッセージBが再び表示され、ワーカーCのメッセージBがデキューされ、ワーカーAのポップレシートが無効になります。作業者Aは作業を終了し、メッセージBを削除してエラーがスローされます。これが最も一般的です。
- 特定の条件(頻繁なキューポーリング)では、GetMessageで同じメッセージを2回取得できます。これは、まれに発生する競合状態の一種です。ワーカーAとBは非常に迅速にポーリングし、同時にキューにヒットし、両方とも同じメッセージを受け取ります。これは以前はポーリングのシナリオの下ではより一般的でしたが(SDK 1.0のタイムフレーム)、最近のストレージアップデートではまれになっています(最近このことを思い出すことはできません)。
と言われています。つまり、ワーカー1人のポップアップメッセージしかなければ、メッセージを2回キューに入れています。 1人と2人は、1人以上の労働者がいる場合にのみ発生します。
- 1. visibilityTimeoutで作成されたストレージキュー内のメッセージを取得できますか?
- 2. Webサービスで空白のページを取得することは
- 3. イオン2空白のスクリーンエラーこのエラーを取得するAndroidの
- 4. Meteorはコレクションから空白データを取得します
- 5. グラフからids_for_pagesを取得すると空白が返されます
- 6. この空白はどこから来たのですか?
- 7. テレグラムロボットがメッセージをチャネルから取得することは可能ですか?
- 8. モンゴーカーソルを2回反復することはできますか?
- 9. ExecuteReader()を2回使用することはできますか?
- 10. SQLから空白を含むデータを取得する
- 11. Python 3では空白とタブを混ぜることができますか?
- 12. REST:ベースラインエンコーディングなしでAzureストレージキューにメッセージを追加しますか?
- 13. facebookから空白の署名付きリクエストを得るには
- 14. jgrowlでメッセージを1回だけスティックすることはできますか?
- 15. Azureストレージキュー - ポイズンキューのメッセージを処理する
- 16. Excel:セルが空白のときSumIfを取得する
- 17. soapサービスのwsdl urlに空白を入れることはできますか?
- 18. joomlaのポストリクエストで空白を含む2ワードを取得できません
- 19. Intellij IDEAのjsから空白行を削除することはできますか?
- 20. Gspread、セルを空白にすることはできません
- 21. Railsの「空白にすることはできません」
- 22. 他のプロセスからcv2フレームを取得することはできますか?
- 23. Springアプリケーションのプロパティからカスタムオブジェクトを取得することはできますか?
- 24. - 空白にすることはできません - それは
- 25. メールは、送信このフォームと空のメールで私に空白のメッセージと
- 26. メッセージが見えない間にSQSからメッセージを取得することは可能ですか?
- 27. Azureストレージキュー - 可視メッセージ数をカウントする
- 28. 文字列(名前)からイニシャルを取得するプログラム、すべての空白を取り除くことはできません
- 29. foreachループは空白のエントリを引き起こしますか?
- 30. ドロップダウンボックスから空白の値を選択するXPATHを取得する方法
本当に2回送信していませんか?メッセージを削除/デキューすると、メッセージは削除されます。 – SliverNinja
メッセージを待ち行列に入れてもそれが2回キューに入れられているのを見ることはできませんが、私は何か不足している可能性があります。より多くのログを追加し、もう少しこれを考える時間。ありがとう – Bryan
そして、そこに行く - それは、私の側に1つのケースで2回、それを記録せずにキューイングするバグだった。 – Bryan