连续的Azure Web Jobs如何是幂等的并发送电子邮件?

时间:2015-06-19 15:50:36

标签: email azure azure-webjobs idempotent

在网上阅读了大量关于Azure WebJobs的信息之后,文档说一份工作应该是幂等的,另一方面,博客称他们使用WebJobs做“收取客户费”,“发送电子邮件”等行为”

This documentation表示在具有队列的多个实例上运行连续的WebJob可能会导致多次调用。人们真的忽略了他们可以两次向客户收费,或者两次发送电子邮件的事实吗?

如何确保我可以在扩展的Web应用上运行带有队列的WebJob,并且只处理一次消息?

1 个答案:

答案 0 :(得分:1)

我使用数据库,带行锁和TransactionScope对象的更新查询来执行此操作。

在Order表中,创建一个列来管理您在WebJob中执行的操作的状态。即EmailSent。

在QueueTrigger函数中开始一个事务,然后在ROWLOCK设置的客户订单上执行UPDATE查询,设置EmailSent = 1,WHERE EmailSent = 0.如果从SqlCommand返回值= 0则退出该函数。另一个WebJob已经发送了电子邮件。否则,如果发送成功,则发送电子邮件并在TransactionScope对象上调用Complete()。

这应该提供你想要的幂等性。

希望有所帮助。