本文目录一览:
- 1、如何在Windows Azure中使用Java相关技术
- 2、如何创建和部署云服务
- 3、怎么使用Windows Azure Queue Storage 服务
- 4、如何通过 Java 使用 Azure Blob 存储
- 5、如何注册使用Azure for DreamSpark
- 6、java代码控制azure虚拟机,比如添加,删除等操作。求具体步骤,用eclipse或netbeans
如何在Windows Azure中使用Java相关技术
将打开Windows Azure模拟器窗口 你可以点击角色查看记录的日志信息 如果你点击合适的节点,可以看到你所有的自定义跟踪,调试Windows Azure应用程序的体验和调试ASP.NET应用程序或Web服务是类似的。
微软的云计算平台支持多种语言和不同框架开发的应用,开发者可以用.NET、PHP、Node.js和Java等变成语言来开发应用程序,而本文我们将阐述如何建立一个能在Windows Azure 平台运行的Java程序。
Windows Azure和Java
为了提高Windows Azure的接受度,微软提供了一个强大的工具集来简化Java应用程序在云中的运行。这些工具集被打包在Windows Azure SDK for Java的包中,包括Windows Azure仿真器、内置于Eclipse IDE的Azure 开发的插件以及Java客户端库。同时,微软也提供了技术上的支持,发布了上述提到的源代码。
如何创建和部署云服务
目录
概念
准备应用程序
开始之前
如何使用"快速构建"构建云服务
如何为云服务上传证书
如何部署云服务
概念
想在Azure中将应用程序部署为云服务,需要以下三个部分:
注意:
服务定义文件:云服务定义文件(.csdef)定义了服务模型,包括角色的数量。
服务配置文件:云服务配置文件(.cscfg)提供了云服务和各个角色的配置设置,包括角色实例的数量。
服务包:服务包(.cspkg)包含应用程序代码和服务定义文件。
准备应用程序
在你可以部署云服务之前,必须利用你的应用程序代码构建云服务包(.cspkg),并构建云服务配置文件 (.cscfg)。每个云服务包都包含应用程序文件和配置。服务配置文件提供了配置设置。
Azure SDK(软件开发工具包)提供了工具,用于准备这些必要的部署文件。你可以从Azure下载页面安装SDK,选择你开发应用程序代码时喜欢使用的那种语言。
如果你刚接触云服务,可以从 Azure代码示例下载示例性的云服务包(.cspkg)和服务配置文件(.cscfg)。
在你导出服务包之前,三种云服务功能需要特殊的配置:
如果你想部署使用安全套接层(SSL)用于数据加密的云服务,对你的应用程序进行SSL方面的配置。想了解详细信息,请参阅《如何在HTTPS端点上配置SSL证书?》。
如果你想针对角色实例配置远程桌面连接,请为远程桌面配置角色。想了解准备服务定义文件,以便远程访问方面的详细信息,请参阅《为角色设置远程桌面连接概述》。
如果你想为云服务配置详细监视机制,为云服务启用Azure诊断。"最少监视"(默认监视级别)使用从角色实例(虚拟机)的主机操作系统收集而来的性能计数器。"详细监视"基于角色实例里面的性能数据,收集额外的度量指标,以便能够对应用程序处理期间出现的问题进行更进一步的分析。想知道如何启用Azure诊断,请参阅《在Azure中启用诊断》。
开始之前
如果你没有安装过Azure SDK,点击Install Azure SDK,打开Azure下载页面,然后下载SDK,选择你编写代码时喜欢使用的那种语言。(之后你有机会这么操作。)
如果任何角色实例需要证书,请构建证书。云服务需要带有私钥的.pfx文件。你可以在构建和部署云服务时,将证书上传到Azure。想了解关于构建证书的详细信息,请参阅《如何在HTTPS端点上配置 SSL 证书?》。
如果你打算将云服务部署到地缘组(affinity group),请构建地缘组。你可以使用地缘组,将云服务及其他Azure服务部署到某个区域中的同一位置。你可以在管理门户的Networks(网络)区域中的"地缘组"页面上构建地缘组。想了解详细信息,请参阅"地缘组"页面上的帮助。
如何使用"快速构建"构建云服务
1. 在管理门户中,依次点击New(新建)、Cloud Service(云服务)和Quick Create(快速构建)。
2. 在URL中,输入要在公共URL中使用的子域名称,用于访问生产部署环境中的云服务。生产部署环境的URL格式为:。
3. 在Region/Affinity Group(区域/地缘组)中,选择要在其中部署云服务的地理区域或地缘组。如果你想将云服务部署到某区域中与其他Azure服务同样的位置,请选择一个地缘组。
注意:如果想构建地缘组,打开管理门户的Networks(网络)区域,点击Affinity Groups(地缘组),然后点击Create a new affinity group(构建新的地缘组)或Create(构建)。你可以使用在前面的Azure管理门户中构建的地缘组。也可以使用Azure服务管理 API,构建和管理地缘组。想了解详细信息,请参阅《地缘组方面的操作》。
4. 点击Create Cloud Service(构建云服务)。
你可以在窗口底部的消息区域监视这个过程的状态。
Cloud Services(云服务)区域随即打开,显示新的云服务。状态变成Created(已构建)后,表明云服务构建已即成功完成。
如果云服务中的任何角色需要用于安全套接字层(SSL)数据加密的证书,而且该证书并没有上传到Azure,你必须先上传该证书,之后才能部署云服务。你上传证书后,在角色实例中运行的任何Windows应用程序都可以访问该证书。
如何为云服务上传证书
1. 在管理门户中,点击Cloud Services(云服务)。然后点击云服务的名称,打开仪表板。
2. 点击Certificates(证书),打开Certificates(证书)页面,如下所示。
3. 点击Add new certificate(添加新证书)或Upload(上传)。Add a Certificate(添加证书)随即打开。
4. 在Certificate file(证书文件)中,使用Browse(浏览),选择要使用的证书(.pfx文件)。
5. 在Password(密码)中,输入证书的私钥。
6. 点击OK(确定,钩形符号)。
你可以在消息区域查看上传进度,如下所示。上传完毕后,证书被添加到表中。在消息区域,点击向下箭头以关闭消息,或者点击X,删除消息。
你可以从仪表板或从"快速启动"部署你的云服务。
如何部署云服务
1. 在管理门户中,点击Cloud Services(云服务)。然后点击云服务的名称,打开仪表板。
2. 点击Quick Start(快速启动,"仪表板"左侧的图标),打开"快速启动"页面,如下所示。(你还可以使用仪表板上的"上传",部署你的云服务。)
3. 如果你没有安装过Azure SDK,点击Install Azure SDK,打开Azure下载页面,然后下载SDK,选择你编写代码时喜欢使用的那种语言。
在下载页面上,你还可以安装客户端库和源代码,以便使用Node.js、Java、PHP及其他语言开发Web应用程序,可以将它们作为可扩展的Azure云服务来部署。
注意:
针对之前构建的云服务(以前叫托管服务),你需要确保虚拟机(角色实例)上的访客操作系统与你安装的Azure SDK版本兼容。想了解详细信息,请参阅Azure SDK软件发布说明。
4. 点击New Production Deployment(新建生产部署环境)或New Staging Deployment(新建试运行部署环境)。
如果你希望将云服务部署到生产环境之前先在Azure中进行测试,可以将其部署到试运行环境。在试运行环境中,云服务的全局唯一标识符(GUID)可在URL中标识云服务(GUID.chinacloudapp.cn)。在生产环境中,将使用你分配的更友好的DNS前缀(比如myservice.chinacloudapp.cn)。如果你准备好将试运行的云服务发布到生产环境,可以使用Swap(交换),将客户端请求重定向到生产部署环境。
你选择部署环境后,Upload a Package(上传包)会打开。
5. 在Deployment name(部署名称)中,输入新部署的名称,比如MyCloudServicev1。
6. 在Package(包)中,使用Browser(浏览),选择要使用的服务包文件(.cspkg)。
7. 在Configuration(配置)中,使用Browser(浏览),选择要使用的服务配置文件(.cscfg)。
8. 如果云服务将包括只有一个实例的任何角色,选择Deploy even if one or more roles contain a single instance (即使一个或多个角色包含单个实例也进行部署)复选框,让部署能够继续进行。
如果每个角色至少有两个实例,Azure只能保证在维护和服务更新期间99.95%的时间段可以访问云服务。如果需要,你在部署云服务后,可以在Scale(扩展)页面上添加额外的角色实例。想了解详细信息,请参阅《服务级别协议》。
1. 点击OK(确定,钩形符号),开始部署云服务。
你可以在消息区域中监视部署状态。点击向下箭头,即可隐藏消息。
想验证你部署的云服务是否已成功完成。
1. 点击Dashboard(仪表板)。
2. 在quick glance(速览)下,点击网站URL,即可在Web浏览器中打开你的云服务。
怎么使用Windows Azure Queue Storage 服务
若要执行存储操作,您需要一个 Windows Azure 存储帐户。可通过以下步骤创建存储帐户。(也可以使用 REST API 创建存储帐户。)
登录到 Windows Azure 管理门户。
在导航窗格的底部,单击“新建”。
+新建
依次单击“数据服务”、“存储”和“快速创建”。
“快速创建”对话框
在 URL 中,键入要在存储帐户的 URI 中使用的子域名称。输入的名称可包含 3-24 个小写字母和数字。此值将成为用于对订阅的 Blob、队列或表资源进行寻址的 URI 中的主机名。
选择要在其中查找存储的区域/地缘组。如果要使用 Windows Azure 应用程序中的存储,请选择要在其中部署该应用程序的区域。
还可以选择启用异地复制。
单击“创建存储帐户”。
创建 Java 应用程序
在本指南中,您将使用存储功能,这些功能可在 Java 应用程序中本地运行,或在 Windows Azure 的 Web 角色或辅助角色中运行的代码中运行。假定您已下载并安装 Java 开发工具包 (JDK),并已按照下载 Windows Azure SDK for Java 中的说明进行操作来安装 Windows Azure Libraries for Java 和 Windows Azure SDK,还在 Windows Azure 订阅中创建了 Windows Azure 存储帐户。您可以使用任何开发工具(包括“记事本”)创建应用程序。您只要能够编译 Java 项目和引用 Windows Azure Libraries for Java 即可。
配置您的应用程序以访问队列存储
将下列导入语句添加到要在其中使用 Windows Azure 存储 API 以访问队列的 Java 文件的顶部:
// Include the following imports to use queue APIs
import com.microsoft.windowsazure.services.core.storage.*;
import com.microsoft.windowsazure.services.queue.client.*;
设置 Windows Azure 存储连接字符串
Windows Azure 存储客户端使用存储连接字符串来存储用于访问数据管理服务的终结点和凭据。在客户端应用程序中运行时,必须提供以下格式的存储连接字符串,并对 AccountName 和 AccountKey 值使用管理门户中列出的存储帐户的名称和存储帐户的主访问密钥。此示例演示如何声明用于保存连接字符串的静态字段:
// Define the connection-string with your values
public static final String storageConnectionString =
"DefaultEndpointsProtocol=http;" +
"AccountName=your_storage_account;" +
"AccountKey=your_storage_account_key";
在 Windows Azure 的角色中运行的应用程序中,此字符串可存储在服务配置文件 ServiceConfiguration.cscfg 中,并可通过调用 RoleEnvironment.getConfigurationSettings 方法进行访问。下面是从服务配置文件中名为 StorageConnectionString 的 Setting 元素中获取连接字符串的示例:
// Retrieve storage account from connection-string
String storageConnectionString =
RoleEnvironment.getConfigurationSettings().get("StorageConnectionString");
如何:创建队列
利用 CloudQueueClient 对象,可以获得队列的引用对象。以下代码将创建 CloudQueueClient 对象。
本指南中的所有代码都使用声明了上述两种方式之一的存储连接字符串。还可以通过其他方式创建 CloudStorageAccount 对象。有关详细信息,请参阅 Javadocs 文档中的 CloudStorageAccount。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
使用 CloudQueueClient 对象获取对要使用的队列的引用。如果队列不存在,您可以创建它。
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Create the queue if it doesn't already exist
queue.createIfNotExist();
如何:向队列添加消息
若要将消息插入现有队列,请先创建一条新的 CloudQueueMessage。紧接着,调用 addMessage 方法。可从字符串(UTF-8 格式)或字节数组创建 CloudQueueMessage。以下代码将创建队列(如果队列不存在)并插入消息“Hello, World”。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Create the queue if it doesn't already exist
queue.createIfNotExist();
// Create a message and add it to the queue
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.addMessage(message);
如何:查看下一条消息
通过调用 peekMessage,可以查看队列前面的消息,而不必从队列中将其删除。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Peek at the next message
CloudQueueMessage peekedMessage = queue.peekMessage();
如何:取消对下一条消息的排队
您的代码通过两个步骤取消在队列中对消息的排队。在调用 retrieveMessage 时,您将获得队列中的下一条消息。从 retrieveMessage 返回的消息变得对从此队列读取消息的任何其他代码不可见。默认情况下,此消息将持续 30 秒不可见。若要完全从队列中删除消息,您还必须调用 deleteMessage。此删除消息的两步过程可确保当您的代码因硬件或软件故障而无法处理消息时,您的其他代码实例可以获取同一消息并重试。您的代码在处理消息后会立即调用 deleteMessage。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Retrieve the first visible message in the queue
CloudQueueMessage retrievedMessage = queue.retrieveMessage();
// Process the message in less than 30 seconds, and then delete the message.
queue.deleteMessage(retrievedMessage);
如何:更改已排队消息的内容
您可以更改队列中已就位消息的内容。如果消息表示工作任务,则可以使用此功能更新工作任务的状态。以下代码使用新内容更新队列消息,并将可见性超时设置为再延长 60 秒。这将保存与消息关联的工作的状态,并额外为客户端提供一分钟的时间来继续处理消息。可使用此方法跟踪队列消息上的多步骤工作流,即使处理步骤因硬件或软件故障而失败,也无需从头开始操作。通常,您还可以保留重试计数,如果某条消息的重试次数超过 n 次,您将删除此消息。这可避免消息在每次处理时都触发应用程序错误。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Retrieve the first visible message in the queue
CloudQueueMessage message = queue.retrieveMessage();
// Modify the message content and set it to be visible in 60 seconds
message.setMessageContent("Updated contents.");
EnumSetMessageUpdateFields updateFields =
EnumSet.of(MessageUpdateFields.CONTENT, MessageUpdateFields.VISIBILITY);
queue.updateMessage(message, 60, updateFields, null, null);
用于对消息取消排队的其他方法
您可以通过两种方式自定义队列中的消息检索。首先,您可以获取一批消息(最多 32 个)。其次,您可以设置更长或更短的不可见超时,从而允许您的代码使用更多或更少的时间来彻底处理每条消息。
以下代码示例使用 retrieveMessages 方法通过一次调用获取 20 条消息。然后,它使用 for 循环来处理每条消息。它还将每条消息的不可见超时设置为五分钟(300 秒)。请注意,这五分钟超时对于所有消息都是同时开始的,因此在调用 retrieveMessages 五分钟后,尚未删除的任何消息都将再次变得可见。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Retrieve 20 messages from the queue with a visibility timeout of 300 seconds
for (CloudQueueMessage message : queue.retrieveMessages(20, 300, null, null)) {
// Do processing for all messages in less than 5 minutes,
// deleting each message after processing.
queue.deleteMessage(message);
}
如何:获取队列长度
您可以获得队列中消息的估计数。downloadAttributes 方法会询问队列服务一些当前值,包括队列中消息的计数。此计数仅为近似值,因为只能在队列服务响应您的请求后添加或删除消息。getApproximateMethodCount 方法返回通过调用 downloadAttributes 检索到的最后一个值,而不会调用队列服务。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Download the approximate message count from the server
queue.downloadAttributes();
// Retrieve the newly cached approximate message count
long cachedMessageCount = queue.getApproximateMessageCount();
如何:删除队列
若要删除队列及其包含的所有消息,请对队列对象调用 delete 方法。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Delete the queue
queue.delete();
如何通过 Java 使用 Azure Blob 存储
1.通过远程桌面的本地资源访问 最简单的方式是通过远程桌面的本地资源访问功能。在虚拟机页底部点击“连接”后,浏览器会提示下载rdp文件。 不要直接打开该文件,而是选择另存,将其存在本地 对于下载的RDP文件,不要直接打开,而是右键,选择Edit...
如何注册使用Azure for DreamSpark
通过Microsoft Azure for DreamSpark,您可免费开始使用云中开发所需的服务:
• Application Insights 可向您360°全方位展示ASP.NET服务及适用于Windows Phone、iOS和Android平台的移动应用程序的可用性、性能和使用情况。搜索并分析您的数据,以便持续改进您的应用程序,明确未来各项投资的轻重缓急并提升整体客户体验。
• Visual Studio Online 是迄今最迅速、最简便的跨多种平台规划、构建和交付软件的方法。只需几分钟即可在我们的云基础结构上准备就绪并开始运行,而无需安装或配置单台服务器。
• Azure 应用服务 Web 应用是全托管式平台即服务(PaaS)的一部分,能够让您快速构建、部署和扩展Web应用。使用ASP.NET、Java、PHP、Node.js或Python。运行受欢迎的Web应用和CMS解决方案,其中包括WordPress、Drupal、Joomla、Umbraco和DotNetNuke。利用VSO、GitHub、TeamCity、Hudson或BitBucket设置连续的集成和部署工作流,让您能够在各个成功的代码签入或集成测试中自动构建、测试和部署您的Web应用。
此外,微软还表示,如果学生用户有需要,可以升级现有服务。不过当前免费模式下微软提供的云服务托管功能,足以完成Web应用和网站的托管任务。
java代码控制azure虚拟机,比如添加,删除等操作。求具体步骤,用eclipse或netbeans
最近,使用Powershell脚本在A7 (8核,56G内存)配置的 Azure VM(Virtual Machine,虚拟机)上远程运行Java JVM时 (Java.exe -version),总是失败并返回如下的错误信息。同样的Powershell脚本,在其它低于A7配置的VM上远程执行一切正常;此外,如果使用远程桌面登录到VM上,再进行同样的操作,一切执行正常。
[plain] view plain copy
Error occurred during initialization of VM
Unable to allocate 458752KB bitmaps for parallel garbage collection for the requested 14680064KB heap.
Error occurred during initialization of VM
Could not reserve enough space for object heap
以上的实验排除了是JVM(1.7)本身的问题, 看来问题很有可能是出在Powershell的远程执行方式上。Powershell Remoting依赖于WinRM (Windows Remote Management)在远程机器上执行操作。默认情况下,WinRM为每个Powershell远程连接分配了最大(MaxMemoryPerShellMB=1024)1G的内存空间(早期的版本只有150M),用于执行远程操作。但远程操作所需的执行内存空间 1G时,就会出现了内存不足的问题,不同的操作可能表现会有所不同,如:有的会抛出OutOfMemoryException等。针对这个问题,解决的办法就是增加MaxMemoryPerShellMB,然后重启WinRM服务:
[plain] view plain copy
$maxMemoryPerShellVM = 3072
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB $maxMemoryPerShellVM
Set-Item WSMan:\localhost\Plugin\Microsoft.PowerShell\Quotas\MaxMemoryPerShellMB $maxMemoryPerShellVM
Write-Output "List MaxMemoryPerShellMB configuration"
Get-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB
Get-Item WSMan:\localhost\Plugin\Microsoft.PowerShell\Quotas\MaxMemoryPerShellMB
# Restart WinRM service to make the change take effect
Restart-Service winrm
具体要增加到多大的内存,需要自己去实验一下。