0

良い一日、

しばらく頭を悩ませてきた概念的な質問をしたいと思います。おそらくここには正しい答えも間違った答えもありませんが、私の選択肢をよりよく理解したいと思っています。

状況:WindowsAzureアプリケーションを使用しています。これは、1つのインスタンスを持つ1つのWebロールと、2つのインスタンスを持つ1つのワーカーロールで構成されます。

主な焦点は労働者の役割です。Quartz.NETスケジューラーを実装して、CRMシステムから情報を取得し、そこからテーブルを作成して、たとえば8時間ごとにFTPサーバーにアップロードするタスクを実行します。とてもシンプルで、派手なものは何もありません。

Webロールは、誰かが8時間間隔で実行する必要がある場合に、ジョブを手動でトリガーするために使用されます。ほぼ1つのボタンを備えたシンプルなユーザーインターフェイス。

ただし、ワーカーロールの一部の構成オプションをWebロールから変更できるようにしたいと思います。たとえば、宛先FTPサーバーのクレデンシャルとジョブのスケジュール。たとえば、8時間ではなく1時間ごとに実行します。ロールがオフラインになった場合、構成を永続化する必要はありません。現時点では、configは静的クラスの1つです。

1つのワーカーロールインスタンスを実行している場合、これは問題とは思われません。たとえば、キュ​​ーを介してWebロールからメッセージを送信し、ワーカーロールのいくつかの静的変数を変更します。しかし、私を混乱させるのは、メッセージキューは、同時に両方ではなく、1つのロールインスタンスによってのみ取得できることです。したがって、あるインスタンスでは8時間ごとに、別のインスタンスでは1時間ごとにジョブを実行することになります。

構成を変更する必要があることを両方のインスタンスに通知する方法はありますか?

4

2 に答える 2

1

これを実現する方法はいくつかあります。@Gauravが提案したものとは別に、2つ提供させてください。

  1. Windows Azure の構成設定。FTP サーバー名と時間間隔を構成設定として保存し、構成を変更すると、各ロール インスタンスがRoleEnvironment.Changingイベントをキャプチャして処理し、新しい設定に基づいてアクションを実行できます。
  2. サービス バス pub/sub。各ロール インスタンスを構成変更トピックにサブスクライブさせることができます。次に、変更があるたびに、その変更をトピックに発行します。サブスクライバーである各インスタンスがメッセージを受信し、それに応じて動作します。
于 2012-08-03T17:01:48.953 に答える
0

1 つの可能性は、"GET" メッセージの代わりに、worker ロール インスタンスによってメッセージで "PEEK" を実行することです。そうすれば、メッセージはすべてのインスタンスに表示されたままになります。明らかに、メッセージをいつ削除するかという課題があります。別の方法として、worker ロール インスタンスごとに個別のキューを作成することもできます (各 worker ロール インスタンスが実際にそのインスタンス用のキューからメッセージを取得するようにキューに名前を付けることができます。 workerrole1-in-0、worker-in-1 などのようにキューに名前を付けることができます)。大声で考えているだけです:)

于 2012-08-03T16:47:42.470 に答える