私は、条件(DevliverCount = 1)を使用してメッセージを1回だけ処理するWebジョブを持っています。なぜなら、ロックタイムが最初のwebjobによって期限切れになったら、他のインスタンスで処理する必要はないからです。他のwebjobは、ロックタイムが切れた後にメッセージを処理しようとするので、条件(DevliverCount = 1)は満たされず、キューからメッセージを自動的に削除するメソッドから出てきます。 ここでの問題は、メッセージ状態がに達していない場合です。(成功以外)メッセージを処理することはありません。この状況をどのように処理するのですか?メッセージを処理しているときに、自分のWebjobでステータスが完了していない
答えて
私は問題の一部は、あなたが同時メッセージ処理を防ぐためにMaxDeliveryCountプロパティを使用しようとしているということだと思う:
最大配信回数の設定を処理することから、複数の消費者を防ぐために使用されていませんメッセージは同時に、「消費者が処理を成功させるのを妨げているメッセージを処理しようとする「有害メッセージ」」を防止するために使用されるため、メッセージは永遠に処理されます。
達成しようとしていることを正確に判断することをおすすめします。あなたが競合する消費者と一緒にMaxDeliveryCountを使用することができます
good description of competing consumers
competing consumers with Service Bus queues
:あなたは複数のwebjobsは、単一のキューからメッセージを消費し、単純な競争消費者のシナリオをしたい場合は、それを達成するための標準的な方法があります...毒のメッセージを防ぐには、MaxDeliveryCountを1より大きい値に設定して、他のコンシューマーにロックの有効期限が切れているメッセージを処理する機会を与えます。
Azure Service Busは、最大配信数を超える毒メッセージのデッドレターをサポートしているため、オフラインでそのようなメッセージを調べることができます。
また、有効期限前にロックを更新するためにWebjobsにコードを追加する必要があるかもしれません。そうでなければ、サービスバスは「処理に長時間を要する有効なメッセージ」と、処理されません。ロックの更新がなければ、長時間有効な有効なメッセージは毒のメッセージと同じように死んでしまいます。これはほぼ確実にあなたが望むものではありません。
幸運を祈る!
- 1. fadeInとfadeOutが十分に速く完了していない
- 2. WebjobがAzureキューの処理ジョブを完了したときに404 Not Found例外が発生しました
- 3. Webブラウザが自分自身を処理していません
- 4. エラー#2044:未処理IOErrorEvent:。テキスト=エラー#2036:ロードが完了していない
- 5. ディレイヤーとスプリッター、シリアルで処理していないメッセージ
- 6. Akkaスケジューラが完了していない
- 7. 述語を使用しているときにTPLデータフローが完了しない
- 8. メインスレッドがブーストスレッドを待っている(完了していない)
- 9. アクティビティを終了しない(完了していない)
- 10. すべてのウィンドウからWM_TOUCHメッセージを取得し、自分のAPPで処理しています
- 11. ThreadPoolがキューの処理を完了したときの判断
- 12. Azure WebJobキューがWebJobを起動していない
- 13. コマンドがまだ完了していないと、Python os.system()が自動的に終了します
- 14. woocommerceでpaypalを使用して支払いが完了したら、注文ステータスを処理に移動するにはどうすればよいですか?
- 15. EditTextの完了ボタンのリスナーと、完了ボタンを押していないときのEditTextをクリアしますか?
- 16. Macでは完了したが、Windowsでは完了していないとマルチプロセッシングがハングアップする
- 17. ビルドフロープラグインとの並列処理が終了しない理由
- 18. NServiceBus:「失敗した処理が完了しました」メッセージ処理のイベントが発生します。
- 19. Vimの:開いているタブが完了していない、何ですか?
- 20. すべてを選択した場合に完了したレコードと完了していないレコードを表示
- 21. ルールの処理が完了したらどうすればいいですか?
- 22. ストリーム処理とメッセージ処理の違い
- 23. タスクが完了していないにもかかわらず、完了しています。
- 24. 角4奇妙なエラー:メッセージのトーストを表示していないときにクエリが終了しない
- 25. 奇妙なJQueryのAppendがDIVを完了していない
- 26. スパークストリーミングでは、前のバッチデータの処理が完了してから、次のバッチデータを処理できますか?
- 27. Excel.Rangeオブジェクトは処理しないExcel処理を終了する
- 28. 質問:照会が完了していないときのfindByIdの方法
- 29. ZendスタジオでCodeIgniterのコードが完了していない
- 30. プログラムが終了した後に管理されていないリソースを処分しないとどうなるのですか?
DeliveryCountは、複数のwebジョブによって処理されているときに増加するBrokeredMessageオブジェクトプロパティです。 –
はい、なぜあなたは1を超えないDeliveryCountを主張しますか?その制限を指定する目標は何ですか? – JoshL
webjobで処理されるメッセージは、メッセージごとに10〜15分以上かかる場合があります。メッセージの最大ロック時間はわずか5分です。その後、期限が切れ、他のwebjobインスタンスがメッセージを読んで再処理を試みることができます。だから私は基本的に同じWebjobの異なるインスタンスによって同じメッセージが複数回処理されないように制限しています。 –