Azure ロールのインスタンスがクラッシュしたという事実を検出したいと考えています。私の場合の検出とは、私の役割の別のインスタンスがクラッシュについて通知されることを意味します。以下で説明する私の考えを確認するか、別の解決策を提案してください。
私が思いついたアイデアは、Azure Queue 内のアイテムの処理時間が限られているという事実を利用しています。
- Azure キューを構成します。ロールのすべてのインスタンスがこのキューをリッスンします。
- 内部エンドポイントを持つようにロール インスタンスを構成する
- インスタンス A が起動すると、メッセージがキューにポストされます。メッセージには、インスタンス A の ID、A の内部エンドポイントの IP、このメッセージを A に転送する必要があるマーカーが含まれています。
- ほとんどの場合、メッセージは別のインスタンス B で終了します。B は内部エンドポイントを介して MessageId と PopReceipt を A に転送します。インスタンス A は、この ctr http://msdn.microsoft.com/en-us/library/dn451949.aspxを使用して CloudQueueMessage のオブジェクトを作成します。
- インスタンス A は、受信したメッセージの表示タイムアウトを無限に更新し始めます。Azure キューの観点からすると、このメッセージは非常に長い間処理されます。最初の更新で、A は「このメッセージを転送する」マーカーを削除します。
- インスタンス A がクラッシュすると、処理の延長が停止します。メッセージは、すぐに他のインスタンスで自動的に表示されるようになります。
- インスタンス C はメッセージを取得し、クラッシュした A について学習します。メッセージにはインスタンス A の ID が含まれており、「このメッセージを転送する」マーカーは含まれていません。
- インスタンス A が正常に停止すると、そのキュー メッセージが処理済みとしてマークされます。