我尝试了几种不同的try/catch循环来尝试自动解决问题,但它们似乎总是导致软件死亡。
$doLoop = true;
while ($doLoop) {
try {
//do a thing
insertIntoDb($data);
} catch (Exception $e) {
//try again
insertIntoDb($data);
//write error to file
writeError($e);
}
}
这是我最初的try/catch。
问题是有时MySQL服务器“消失”,我需要捕获该异常并不断重试,直到它回来。
我可以在这里更改什么,以使此不断重试,直到成功?
2条答案
按热度按时间kr98yfug1#
在
try
块中使用break作为最后一条语句,使循环只在成功时进行。但是你也应该使用
for
循环来限制重试的次数。否则,您的代码可能会在无限循环中运行:
还请注意
usleep()
调用:这一点很重要,因为否则PHP进程将占用所有资源(100% CPU),同时尽可能快地重试。您可以调整该值以满足您的需要。(在您的情况下,200 ms可能太长或太短)
另外请注意,在失败时,您可能需要重新连接到MySQL DB!在我的示例中,我没有包含这种情况的代码。
pdkcd3nj2#
只有当你的函数
insertIntoDb
抛出一个Exception的时候,这个方法才能起作用。如果你使用mysql* 函数,那么它就不能起作用。在
insertIntoDb($data);
之后,您应该设置$doLoop = false