我正在使用 ProgramEntryPoint 在 Windows Azure Worker Role 中运行命令行程序(可能是 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 脚本或批处理文件的唯一方法吗?
谢谢你的想法。