Gearman:还没有办法从后台工作者那里检索自定义数据吗?

时间:2012-07-23 15:47:17

标签: php gearman asynchronous

首先,我知道this问题:

我想知道的是,Gearman的情况还是如此吗?我打算从PHP Web应用程序向齿轮工作者发送一批图像URL(也用PHP编写;让我们称之为“主工作者”)进行异步处理。然后,该工作人员将为每个映像向下层工作者提交单独的任务(通过addTask()),调用runTasks()并等待任务完成,同时监听异常,累积错误消息并更新整个作业状态。

虽然我完全可以使用jobStatus()调用从Main Worker检索整体状态,但只是说当返回[false,false,0,0]时所有图像都被处理了,我肯定需要能够告知用户某些图像无法从各自的URL中检索到或存储在服务器上。

我想我总是可以将自定义数据存储在memcache中,然后从Web应用程序中检索它,但它对我来说似乎“更脏”......

我不是想得到任何结果,因为从我在php.net上的手册中看到的,即使是异步处理也只能在同步提交任务时完成,而不是提及自定义数据检索。我只是希望有一些我不知道的东西。 我记得很清楚,我们正在使用带有libgearman6(v 0.27)和PHP 5.3.10的Ubuntu Server 12.04。 Gearman扩展的版本是1.0.2。我认为数据库在这里是无关紧要的,因为我不会在任何一个工人中使用它。而且我认为我们现在还没有使用持久队列。

1 个答案:

答案 0 :(得分:3)

由于在任务完成后,gearman不会在内存中保留任何任务信息(仅针对同步任务报告),如果不将其存储在第三方中,您将无法在Web应用程序中检索它地点。我们通常在应用程序中使用一个简单的Web服务,让工作人员在任务完成或发生错误时回调应用程序。这使得我们可以保持业务逻辑在我们想要在其所属的应用程序中发生此类错误时执行的操作,并让我们的工作人员更加通用(我们可能需要在许多应用程序中调整图像大小,但某些应用程序可能需要开始几个依赖于首先完成图像调整大小的子任务。

在编写时,您也可以让工作人员使用任务状态直接写入数据库或memcached,但我发现让应用程序本身处理逻辑而不必更改和特殊情况工人工作得更好。它也非常适合工作者框架,让您保持处理实际工作者代码回调的标准化方法。