2

X 時間ごとにコードを実行する (データを取得して Azure SQL に保存する) ワーカー ロールがあります。タイミングは、Run メソッドの while(true) ループで Thread.Sleep を使用して実装されます。

Web ロールでは、Worker ロールでコードを手動で開始できるようにしたいと考えています (私の場合は手動でデータを取得して保存します)。Azure Management API を使用して Worker ロール全体を再起動できることがわかりましたが、特に証明書に関して必要なすべての作業を見ると、やり過ぎのように思えます。

Web ロールから Worker ロールを再起動する、または Worker ロールのコードを Web ロールからオンデマンドで実行する、より良い方法はありますか?

4

2 に答える 2

1

イベントを Azure Queue に投稿する、BLOB を Azure Blob に投稿する、Azure Tables のレコードを変更する、または SQL Azure で何らかの変更を行うなど、何でも機能します。Web ロールが変更を行い、worker ロールがその変更を待機します。 . 確かではありませんが、おそらく Azure Queues が最もクリーンな方法でしょう。

注意すべき非常に重要なことの 1 つは、ポーリングを使用することに決めた場合 (BLOB が表示されるまでクエリを実行するなど)、クエリ間に遅延を挿入する必要があることです。それ以外の場合は、次のコードを使用します。

while( true ) {
   if( storage.BlobExists( blobName ) ) {
       break;
   }
}

ストレージに突入し、法外な取引手数料が発生します。SQL Azure の場合、料金は発生しませんが、サービス キャパシティを無駄に浪費することになり、SQL Azure にキューに入れる他の操作が遅くなります。

これはどのように行われるべきかです:

while( true ) {
   if( storage.BlobExists( blobName ) ) {
       break;
   }
   // value should not be less that several hundred (milliseconds)
   System.Threading.Thread.Sleep( 15 * 1000 );
}
于 2013-01-24T07:43:39.720 に答える
1

Azure Fluent Management (内部で Service Management API を使用) を使用することをお勧めします。「Windows Azure への展開」ページをご覧ください。

やりたいことは次のとおりです。

  • クラウド サービス: mywebapp.cloudapp.net
    • 生産スロット
      • 役割: MyMvcApplication
  • クラウド サービス: mybackgroundworker.cloudapp.net
    • 生産スロット
      • 展開なし

したがって、通常は Web ロールで実行されているクラウド サービスがあり、それだけです。次に、ワーカー ロールを作成し、コードを追加して cspkg ファイルにパッケージ化し、BLOB ストレージにアップロードします。

最後に、パッケージをローカルにダウンロードしてから次のようなコードを実行することで、ワーカー ロールを他のクラウド サービスにデプロイ (または削除) できるコードを Web ロールに追加します。

 var subscriptionManager = new SubscriptionManager(TestConstants.SubscriptionId);
 var deploymentManager = subscriptionManager.GetDeploymentManager();

 deploymentManager
       .AddCertificateFromStore(Constants.Thumbprint)
       .ForNewDeployment(TestConstants.HostedServiceName)
       .SetCspkgEndpoint(@"C:\mypackage")
       .WithNewHostedService("myelastatestservice")
       .WithStorageAccount("account")
       .AddDescription("my new service")
       .AddLocation(LocationConstants.NorthEurope)
       .GoHostedServiceDeployment();
于 2013-01-23T15:36:50.297 に答える