首先,我知道this问题:
我想知道,Gearman还是这样吗?我计划将一批图像 URL 从 PHP Web 应用程序发送到 gearman Worker(也是用 PHP 编写的;我们称之为“Main Worker”)进行异步处理。然后,该工作人员将为每个图像提交一个单独的任务给下层工作人员(通过 addTask()),调用 runTasks() 并等待任务完成,同时侦听异常,累积错误消息并更新整体作业状态。
虽然我完全可以使用 jobStatus() 调用从 Main Worker 检索整体状态,但只要说返回 [false, false, 0, 0] 时所有图像都已处理,我确实需要能够通知用户某些图像无法从其各自的 URL 检索或存储在服务器上。
我想我总是可以将自定义数据存储在内存缓存中,然后从网络应用程序中检索它,但对我来说它似乎“更脏”......
我并不想得到任何结果,因为从我在php.net上的手册中看到的,即使是异常处理也只能在任务同步提交时才能完成,更不用说自定义数据检索了。我只是希望我可能缺少一些东西。
我没记错,我们使用的是带有 libgearman6 (v 0.27) 和 PHP 5.3.10 的 Ubuntu Server 12.04。 gearman 扩展的版本是 1.0.2。我认为数据库在这里无关紧要,因为我不会在任何一个工作人员中使用它。我认为我们现在没有使用持久队列。
由于 gearman 在任务完成后不会在内存中保留任何任务信息(只需将其报告为同步任务),因此如果不将其存储在第 3 方位置,您将无法在 Web 应用程序中检索它。为此,我们通常在应用程序中使用一个简单的 Web 服务,让工作人员在任务完成或发生错误时回调应用程序。这使我们能够保留有关当此类错误发生在其所属的应用程序中时我们想要做什么的业务逻辑,并让我们的工作人员更加通用(我们可能需要在许多应用程序中调整图像大小,但某些应用程序可能想要启动几个依赖于首先完成的图像大小调整的子任务)。
当您编写时,您也可以让工作人员直接将任务状态写入数据库或写入内存缓存,但我发现让应用程序本身处理逻辑而不必进行更改,特殊情况下工作人员工作得更好。它也非常适合工作框架,让您可以在实际工作代码中保持相同的标准化方式处理回调。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)