使用 GearmanManager 添加新作业



我对整个Gearman和GearmanManager周期仍然很陌生。我有一个工作服务器,并且已经验证了我的作业在服务器启动时是否已经在我的队列(MySQL 表)中运行。但是,我需要能够从 PHP 向队列添加新作业,如果可能的话,还可以从 worker 内部添加新作业。

现在,我将在部署新代码库时创建一份工作。这将是要运行的第一个作业,其目的是为报告收集一些数据并存储它。

这需要每小时运行一次,所以我想利用when_to_run列。我一直在考虑 Gearman 的文档,但我仍然对我实际上应该如何将作业添加到队列中感到困惑。

我试过跑步:

<?php
$gm = new GearmanClient;
$gm->addServer();
$gm->doBackground('Metadata_Ingest_Report', '', com_create_guid());

附带说明一下,是的,我确实安装了php-pecl-uuid。

上面的代码只是挂起,不做任何事情。不会将作业添加到数据库,也不会发生任何反应。

这是因为我没有完全理解工作是如何发送的,我正在尽我所能进行RTM,但我没有任何运气。

因此,如果有什么可以指出的,或者如果有人有时间解释我应该如何设置作业并将其添加到MySQL队列中,以便GearmanManager的工作人员选择它们,那就太棒了。

编辑:所以看来你必须打电话给$gm->addServer('127.0.0.1')。根据文档127.0.0.1应该是默认值,但运行 PHP 5.4.11 似乎并非如此。如果我在$gm->addTask()之后调用$gm->runTasks(),我现在可以让任务运行。我希望只需要调用$gm->addTask(),任务就会被添加到数据库中,GearmanManager 会看到它并将其假脱机。还在挖...

此致敬意
安德鲁

因此,when_to_run功能似乎没有在pecl-gearman上公开。因此,我们无法使用其内置方法为将来安排作业。似乎库并没有像它应该的那样创建数据库记录(我认为这实际上可能是 Gearmand 在运行作业之前没有将作业卸载到数据库。

为了解决这个问题,我们决定执行以下操作。

计划未来的作业

  1. 手动将作业插入gearman_queue .
  2. 每分钟运行一次 CRON 以 ping 队列表并加载具有when_to_run <= time()的作业
  3. 通过addTask($function, $payload)runTasks()解雇这些工作。该$payload还包含来自数据库的 UUID。
  4. GearmanManager接手工作,并将有效载荷交给各自的工人。
  5. 辅助角色运行,然后在完成后,使用DELETE从数据库中删除该项目。

立即运行作业

  1. 手动将作业插入gearmand_queuewhen_to_runNULL
  2. 运行addTask($function, $payload)runTasks()。该$payload还包含来自数据库的 UUID。
  3. GearmanManager接手工作,将有效载荷交给他们的重复工人。
  4. 辅助角色运行,然后在完成后,使用DELETE从数据库中删除该项目。

结论

Gearmand Job Server,GearmanManager和pecl-gearman在支持的内容和完成方式方面似乎都不同步。在大多数情况下,我认为这个问题在于pecl-gearman与Gearmand交谈的核心。

我还为when_to_run打开了关于pecl-gearman项目的功能请求:https://bugs.php.net/bug.php?id=64120

在添加任务之前,启动齿轮服务器。

对于 Linux:

/usr/bin/gearmand -d  -L 127.0.0.1 -q libdrizzle /
--libdrizzle-user=your_db_user --libdrizzle-password=your_db_pass /
--libdrizzle-db=your_db_name --libdrizzle-mysql -vvvv

添加任务后,创建工作人员看起来像工人.php:

<?php
$worker= new GearmanWorker(); 
$worker->addServer(); 
while ($worker->work());
function Metadata_Ingest_Report( $job )
{ 
    // do something
}

并启动此工作线程

/usr/bin/php worker.php

相关内容

  • 没有找到相关文章

最新更新