【发布时间】:2010-09-20 09:51:26
【问题描述】:
我不知道比赛条件是否是最好的词,但我没有找到更好的词。
在某些情况下,我会向应用程序的管理员发送邮件。然后他们可以登录,验证一些数据,然后自动向应用程序的所有用户发送电子邮件。如何防止两个或多个管理员登录并同时按下发送按钮的情况?在这种情况下,我只希望邮件发送一次。
【问题讨论】:
标签: java google-app-engine web-applications
我不知道比赛条件是否是最好的词,但我没有找到更好的词。
在某些情况下,我会向应用程序的管理员发送邮件。然后他们可以登录,验证一些数据,然后自动向应用程序的所有用户发送电子邮件。如何防止两个或多个管理员登录并同时按下发送按钮的情况?在这种情况下,我只希望邮件发送一次。
【问题讨论】:
标签: java google-app-engine web-applications
我会说选择named tasks。每当单击按钮时将任务添加到队列中,但请确保在这两种情况下的名称都将防止重复(例如,您可以使用今天的日期或常数来命名它)。
因此,如果任务已经在队列中,您会发现...然后您可以选择要采取的操作。您的处理程序还可以记录此邮件已被管理员操作,并在其他管理员登录时告知他们。
【讨论】:
可能最好的是按下发送按钮不会发送电子邮件,它只是将任务添加到任务队列中。然后,该任务的处理程序确保消息只发送一次(并且它可以通过重新排队任务来重试发送失败的消息,或者它可以将电子邮件批量发送到一次仅发送给有限数量的收件人,无论最终花费多长时间)。
如果您的应用当前在消息发送失败时向管理员提供反馈,这意味着您需要向管理员提供任务队列及其结果的一些视图。
【讨论】:
我想到的最简单的方法是在发送另一封电子邮件之前创建大约 5 分钟的锁定期,并通知管理员类似的事情刚刚发生,这样他/她就可以取消发送他/她自己的电子邮件。
【讨论】:
您可以创建一个非常基本的工作流系统来解决这个问题。您可以在系统中拥有Task 的概念,并将任务信息保存到数据库表中。当您的应用程序向管理员发送邮件时,它应该向此表添加一个任务。当管理员登录时,他们应该将任务分配给自己。一旦管理员分配了任务,这将反映在数据库中,防止其他人分配它。
你的Task 可能会模仿的东西是什么;
【讨论】: