次のようにProgramEntryPointを使用して、Windows Azureワーカーロール内でコマンドラインプログラム(Redisになる可能性があります)を実行しています
<WorkerRole name="Worker" vmsize="Small">
<Runtime executionContext="limited">
<Environment>
<Variable name="ADDRESS">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='Redis']/@address" />
</Variable>
<Variable name="PORT">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='Redis']/@port" />
</Variable>
</Environment>
<EntryPoint>
<ProgramEntryPoint commandLine="redis-server.exe" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
<Endpoints>
<InternalEndpoint name="Redis" protocol="tcp" port="6379" />
</Endpoints>
</WorkerRole>
これまでのところ、とても良いです(それは動作します)。別のWorkerRoleでサーバーのスレーブインスタンスを実行したい
<WorkerRole name="SlaveWorker" vmsize="Small">
<Runtime executionContext="limited">
<EntryPoint>
<ProgramEntryPoint commandLine="echo slaveof %ADDRESS% %PORT% | redis-server.exe -" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
<Imports>
<Import moduleName="Diagnostics" />
<Import moduleName="RemoteAccess" />
</Imports>
<Endpoints>
<InternalEndpoint name="Redis" protocol="tcp" port="6379" />
</Endpoints>
</WorkerRole>
マスターがIPアドレスとポートを使用している場所をスレーブサーバーに通知する必要があることがわかります。Azureがその役割にネットワークリソースを割り当てるまで、私にはわかりません。@smarxがこれらの線に沿って何かをするのを見てきました。
しかし、私の場合、これにはいくつかの問題があると思います
ある役割で環境変数を設定し、別の役割でそれらを使用することを望んでいます-機能しません。
適切なデータが利用可能であったとしても、それをredis-server.exeに渡す必要がある方法は、最初にエコーがある有効なエントリポイントとして認識されません。
- コードを介して別のワーカーロールのランタイムIPアドレスとポートを知る唯一の方法ですか、それとも構成ファイルに欠落している構文がありますか?
- IPとポートを取得できた場合、コマンドラインを機能させてPowerShellスクリプトまたはバッチファイルにプッシュする唯一の方法はありますか?
あなたの考えをありがとう。