7

複数のワーカー ロールが同じインスタンスで実行されるように Windows Azure をセットアップするにはどうすればよいですか? 出来ますか?

4

3 に答える 3

8

Worker Role とは何かを誤解していると思います。Web ロールと Worker ロールは Window Server VM です。主な違いは、Web ロールでは IIS が実行されていることです。それぞれのインスタンスが複数ある場合があります。

「同じインスタンスに複数のワーカー ロール」というものは実際にはありません。Worker ロールは、仮想マシンのテンプレートと考えてください。スタートアップ スクリプトと、スタートアップやシャットダウンなどのメッセージを処理するイベント処理コードと、パッケージ化されて仮想マシン内で実行される記述したコードが含まれます。

OnStart()またはから、Run()ほとんどすべてのコードを実行できます。複数のスレッドを開始し、サーバー コード (Tomcat など) を実行します。どのようなコードでも、各インスタンスで実行されます。複数のインスタンスにスケールアウトすると、これらの各インスタンスで同じ VM テンプレートが使用されます。

こちらの回答もご覧ください。もう少し詳しく説明します。

于 2012-05-31T10:55:25.353 に答える
5

デビッドが彼の答えで述べたように、あなたは複数のスレッドを開始することができます。私の顧客の1人は、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つのインスタンスを実行できます。そして、これが必要な場合、ThreadedRoleEntryPointに渡されたワーカーはRoleEntryPointクラスによく似たWorkerEntryPointから継承するため、コードへの影響は最小限に抑えられます。

于 2012-05-31T12:38:26.233 に答える
-2

はい、できます。ここにデザインパターンがあります http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html

于 2012-06-03T17:36:26.780 に答える