Azure ServiceDefinition文件 – ProgramEntryPoint,运行时IP地址和端口

我正在使用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中运行服务器的slave实例

<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为该角色分配网络资源之前我不知道的事情.我已经seen @smarx do something along these lines了.

但是我觉得在我的情况下可能有一些问题

>我将环境变量设置为一个角色,并希望在另一个角色中使用它们 – 不会起作用.
>即使正确的数据可用,我需要将其传递给redis-server.exe的方式也不会被识别为开头有回声的有效入口点

>是了解另一个运行时IP地址和端口的唯一方法
通过代码的工作者角色或是否有我在配置中缺少的语法
文件?
>如果我设法获得IP和端口,是唯一的方法来制作我的
命令行工作将其推送到PowerShell脚本或批处理文件?

谢谢你的想法.

最佳答案 一个实例知道另一个IP地址的唯一方法是:a.它以编程方式抓取它,或b.)另一个实例将其发布到一个众所周知的位置(例如表存储).在您的情况下,最简单的方法是让slave角色运行一个启动任务来访问RoleEnvironment(可能通过Powershell),并使用Master的IP地址设置一个Environment变量.如果你把它作为一个“简单”类型,我相信它会在你的ProgramEntryPoint执行之前运行(阻塞),你可以在命令行中使用env var.

然而,这里有几个想法

>您如何处理角色中的多实例?您是否只计划运行单个实例?
>你需要两个不同的角色吗?为什么不是一个具有2个实例的角色通过选举决定谁是主人?

点赞