Java 如何为每个Windows Azure虚拟机操作系统设置一些唯一标识符

Java 如何为每个Windows Azure虚拟机操作系统设置一些唯一标识符,java,azure,environment-variables,virtual-machine,azure-vm-role,Java,Azure,Environment Variables,Virtual Machine,Azure Vm Role,我有一些虚拟机以相同的配置运行。在这些虚拟机上,我安装了我的应用程序 我想在我的虚拟机中设置一些自定义的唯一标识符,以便我知道特定的(来自我的应用程序)请求来自哪个虚拟机,该请求来自哪个虚拟机(或者该应用程序正在哪个虚拟机中运行)。由于同一个应用程序在所有VM中运行,所以为了区分每个请求,我想在创建虚拟机时设置一些唯一的自定义标识符 我想在创建虚拟机时设置一些系统属性/环境变量 我正在使用WindowsAzure RESTAPI和Java在WindowsAzure门户上创建和管理虚拟机。我想通过

我有一些虚拟机以相同的配置运行。在这些虚拟机上,我安装了我的应用程序

我想在我的虚拟机中设置一些自定义的唯一标识符,以便我知道特定的(来自我的应用程序)请求来自哪个虚拟机,该请求来自哪个虚拟机(或者该应用程序正在哪个虚拟机中运行)。由于同一个应用程序在所有VM中运行,所以为了区分每个请求,我想在创建虚拟机时设置一些唯一的自定义标识符

我想在创建虚拟机时设置一些系统属性/环境变量

我正在使用WindowsAzure RESTAPI和Java在WindowsAzure门户上创建和管理虚拟机。我想通过使用Java编程语言来实现这一点


如果您有相关信息,请告诉我。

您可以使用远程桌面服务连接到您的虚拟机,因此连接并向应用程序的web.config文件添加标识部署的设置应该很简单,或者,如果您希望web.config文件相同,则可以上载一个小文本文件

或者,您的服务器必须已经具有唯一的名称。我想你正在运行一个.Net应用程序?如果是这样的话,那么您应该能够使用
Server.MachineName
()来获取代码所运行的框的唯一名称。

每个实例都应该具有不同的SID,因为这些机器都使用了generalize选项(当您想要提供自定义映像时,同样适用)。您可以使用中的代码获取SID,并将其用作标识符:

        string domainName;
        Helper.SID_NAME_USE accountType;
        SecurityIdentifier machineSID = 
                Helper.LookupAccountName("", Environment.MachineName, out domainName, out accountType);
注意:即使代码中显示了域名,您的机器也不需要在域中才能工作

要在VM上设置“自定义标识符”,可以使用环境变量。因为您使用的是Java,所以设置它们的最简单方法可能是setx.exe命令行工具()。您可以这样调用该工具:

setx.exe VmIdentifier 123 -m
然后,您应该能够使用系统读取它:

System.getenv("VmIdentifier")
我不太清楚您是在使用虚拟机(IaaS)还是云服务(PaaS)。如果您使用的是虚拟机,则由您来部署应用程序,同时,您还可以执行setx.exe


现在,如果您使用的是云服务,那么您实际上上传了一个部署在实例上的包。您还可以获得对启动任务(在应用程序启动之前运行)的支持。您可以使用启动任务来运行setx.exe,但请确保在将executionContext设置为提升的情况下运行它。

谢谢您的回复。我正在运行一个java应用程序。我正在计划是否可以为每个虚拟机设置一些对每个虚拟机唯一的环境变量,然后在该虚拟机上运行的任何应用程序都可以访问特定的虚拟机并发送每个请求。但是如何在虚拟机操作系统中设置env变量。不客气,尽管我认为我做得不太好!您可能想重新表述您的问题-添加Java和对路径变量的需求将使某人更容易回答,而将Java添加到标记将从您的开发者风格中得到帮助。我想大多数人会认为Azure问题是关于.NET的,除非你明确地标记它。祝你好运,欢迎来到Stack Overflow。谢谢你的宝贵建议。我相应地更新了问题。感谢您的回复,我想设置我自己的唯一标识符,然后稍后从运行在该VM内的应用程序中检索它。非常感谢您的回答。我想在Azure云环境上部署该虚拟机时设置标识符,并以编程方式进行设置。因此,在启动该虚拟机之后,我会设置该环境变量。您是部署WebRole/WorkerRole还是虚拟机?我正在部署VirtualMachine.Ow。。虚拟机角色?这些不支持启动任务,并且不是持久性的。我认为最好的办法是在ServiceConfiguration.cscfg中添加标识符(可能类似于:Instance_1=12345939,Instance_2=29298483,…)。然后,您可以通过
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.getCurrentRoleInstance
获取当前实例,并找到匹配的设置。但我不认为有一个干净的解决办法。