我有多个实例的网络角色。我想每天早上7点向我的客户发送一封电子邮件,其中包含他们的统计信息。 我的问题如下:如果我使用 Cron作业来处理工作邮件将多次发送。
如何配置我的实例才能向每位客户发送一封电子邮件?
答案 0 :(得分:1)
根据我的经验,我认为您可以尝试使用唯一的实例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
.....
}
作为参考,请参阅下面的函数RoleInstance.getId
的说明。
返回此实例的ID。
返回的ID对于角色实例的应用程序域是唯一的。如果实例已终止且已配置为自动重新启动,则重新启动的实例将 与已终止的实例具有相同的ID 。
有关在Azure SDK for Java中使用上述类的更多详细信息,请参阅下面的类列表。
希望它有所帮助。
答案 1 :(得分:0)
通常,Multi-instance Cloud Services
解决此问题的方法是使用Master Election
模式。你要做的是在早上7点(或者当你的CRON工作开始时),你的所有实例都会尝试获得blob上的租约。但是,只有一个实例将成功获取租约,而其他实例将失败且出现PreConditionFailed (419)
错误(请确保捕获此异常!)。获取租约的实例基本上是Master
,该实例将发送电子邮件。
显然,这种方法的问题在于,如果此Master
实例无法传递消息,该怎么办?但我想这是另一个问题:)。