Azure Web角色和实例

Azure Web角色和实例,azure,azure-web-roles,Azure,Azure Web Roles,我有一个具有多个实例的web角色。我想每天早上7点发一封电子邮件给我的客户,告诉他们他们的统计数据。 我的问题如下:如果我使用Cron作业来完成工作,邮件将被发送多次 如何配置实例以便只向每个客户发送一封电子邮件?使用多实例云服务解决此问题的典型方法是使用主选择模式。您要做的是在上午7:00(或者当您的CRON作业启动时),您的所有实例都将尝试获取blob上的租约。但是,只有一个实例将成功获取租约,而其他实例将失败,并出现premissionfailed(419)error(请确保捕获此异常!)

我有一个具有多个实例的web角色。我想每天早上7点发一封电子邮件给我的客户,告诉他们他们的统计数据。 我的问题如下:如果我使用Cron作业来完成工作,邮件将被发送多次


如何配置实例以便只向每个客户发送一封电子邮件?

使用
多实例云服务解决此问题的典型方法是使用
主选择模式。您要做的是在上午7:00(或者当您的CRON作业启动时),您的所有实例都将尝试获取blob上的租约。但是,只有一个实例将成功获取租约,而其他实例将失败,并出现
premissionfailed(419)
error(请确保捕获此异常!)。获取租约的实例本质上是一个
主机
,该实例将发送电子邮件


显然,这种方法的问题在于,如果这个
实例无法传递消息,该怎么办。但我想这是另一个问题:)。

根据我的经验,我认为您可以尝试使用唯一的实例id来确保有一个实例可以作为cron作业发送电子邮件

下面是一个简单的代码

import com.microsoft.windowsazure.serviceruntime.RoleEnvironment;

String instanceId = RoleEnvironment.getCurrentRoleInstance().getId();
if("<instace-id-for-running-cronjob>".equals(instanceId)) {
    // Coding for cron job
    .....
}
导入com.microsoft.windowsazure.servicereuntime.RoleEnvironment;
字符串instanceId=RoleEnvironment.getCurrentRoleInstance().getId();
如果(“.”等于(实例ID)){
//cron作业的编码
.....
}
作为参考,请参见下面对函数
RoleInstance.getId
的描述

返回此实例的ID。
返回的ID对于角色实例的应用程序域是唯一的。如果实例被终止并配置为自动重新启动,则重新启动的实例将具有与终止的实例相同的ID

有关使用上述Azure SDK for Java类的更多详细信息,请参阅下面的类列表

希望能有帮助