1

実行中の場合、SQLデータレイヤー内で知りたいワーカーロールを作成しています。

onStartが呼び出されたときにロールを登録し、onStopメソッドで登録解除することを検討しています。onStop呼ばれていると期待できますか?または、10分ごとに生きていることを報告し、別のアプリケーションに生きていることを確認させ、そうでない場合はユニットをオフラインに設定する必要がありますか?

分散プログラムに関するこの問題をどのように回避するのでしょうか?

ワーカー/Web ロールの特定のインスタンスの一意の GUID を取得することは可能ですか?

4

2 に答える 2

1

ハートビートはこれを行う正しい方法です。OnStopハードウェアが突然故障する可能性があるため、それが呼び出されることを保証することはできません。

于 2012-10-28T18:26:56.783 に答える
1

いいえ、呼び出されることは期待できませんOnStop()。インスタンスがクラッシュするノードがOnStop()呼び出されない場合。Run()例外が外部またはOnStart()インスタンスの外部に伝播された場合、OnStop()呼び出されません。これらは私が今思いつく上位のケースであり、おそらくもっと多くのケースがあります。肝心なのは、呼び出されることを期待できないOnStop()ということです。

SQL Azure や Azure キューなど、永続的なストレージに格納されたハートビートを使用する必要があります。「クリーンアップ」または「再処理」を行いたい場合は、かなり長い間ハートビートのないものを選択するだけです。たとえば、ライブ エンティティは 1 分ごとにハートビートを発行します。その後、5 分間以上ハートビートがないものはすべて死んでいると見なすことができます。

于 2012-10-29T12:45:31.377 に答える