我正在开发web应用程序,其中有一个在预定时间发送电子邮件的要求。正确的场景是:如果邮件功能由于任何原因而失败,重试尝试应该在特定的时间段之后进行,直到邮件成功。所以这里的问题是,如果我在某个地方记录了邮件详细信息(这里是mysql db表),重试机制是如何实现的。这可以在不使用cronjob的情况下实现吗?如果是,如何??
提前谢谢。
发布于 2013-04-23 21:40:47
您无论如何都需要某种cron系统,但它可能只是一个调用站点上特定页面的第三方服务。为什么你一开始就不想使用cronjob呢?
那么您的过程将只是记录队列中任何失败的尝试,并每隔x小时处理该队列(=发送邮件)。您还可以考虑设置最大重试次数或类似这样的设置。
发布于 2013-04-23 21:44:27
如果您必须使用计划时间,我肯定会使用cronjob。要确保电子邮件已发送,只需使用true/false循环检查其是否已发送。
发布于 2013-04-23 21:56:27
您可以尝试创建一个包含无限循环的页面。这是完全未经测试的,我以前从来没有实现过这样的东西--这只是一个建议:
$hourToSend = 17; //this is the specified time to send (e.g. an hour, day, week..)
while(1)
{
start:
if(emailNotSent() == true && date('H') == $hourToSend) //boolean (function or variable) set after the email script has executed. could even be an array of email IDs.
{
resendEmail();
}
else
{
sleep(3600); //set an interval to check for failed emails, default = every hour
goto start;
}
}这假设您访问的服务器具有良好的正常运行时间,这不会受到始终打开的一个浏览器窗口的影响(对于监视、报告、日志记录等可能是有好处的)。
+1对于有趣的问题,评论和建议,欢迎
https://stackoverflow.com/questions/16170788
复制相似问题