2012-05-31 17 views

答えて

8

私はあなたが職務役割が何であるか誤解していると思います。 WebとWorkerの役割はWindow ServerのVMですが、主な違いはWebの役割はIISを実行していることです。それぞれのインスタンスが複数存在する場合があります。

「同じインスタンス内に複数の作業者の役割」というようなことはありません。仮想マシンのテンプレートとしてWorker Roleを考えてみましょう。スタートアップスクリプトと、スタートアップやシャットダウンなどのメッセージを処理するイベント処理コードと、仮想マシン内でパッケージ化されて実行されるコードを記述します。

OnStart()またはRun()から、必要なコードを実行することができます。複数のスレッドをキックオフしたり、Tomcatのようなサーバコードを実行したりします。どのようなコードでも、それぞれのインスタンスで実行されます。複数のインスタンスにスケールアウトすると、これらの各インスタンスで同じVMテンプレートが使用されます。

this answerを参照してください。ここではもう少し詳しく説明します。

5

Davidさんが答えてくれたように、複数のスレッドを開始できます。私の顧客の一人がThreadedRoleEntryPointクラスを使用してこれを行いました。

このクラスは、あなたが(でも、複数のアセンブリから)複数のワーカーロールエントリ・ポイント・クラスを使用し、同じ役割でそれらを実行することができます:

public override void Run() 
    { 
     Trace.TraceInformation("WebRole::Run begin", "Information"); 

     List<WorkerEntryPoint> workers = new List<WorkerEntryPoint>(); 

     workers.Add(new Worker1()); 
     workers.Add(new Worker2()); 

     base.Run(workers.ToArray()); 

     Trace.TraceInformation("WebRole::Run end", "Information"); 
    } 

ここでの利点は、あなたが小さな開始し、すべての作業を実行する可能性があることですロール(実際にはワーカーロールではありませんが、プロセスやワーカーと呼ぶ)を単一のロール(実際に展開するロール)に配置します。

ビジネスの成長が始まると、専用ロールを使用して作業を開始できます。つまり、ワーカー・ロールごとに少なくとも1つのインスタンスが実行されます。これを実行する必要があるときは、RoleEntryPointクラスのように見えるWorkerEntryPointから継承したThreadedRoleEntryPointに渡されたワーカーがいるため、コードへの影響は最小限に抑えられます。

関連する問題