Php ZF2-使用SLMQUEBEANSTALKD和DOMPDFModule创建PDF文件的作业队列

Php ZF2-使用SLMQUEBEANSTALKD和DOMPDFModule创建PDF文件的作业队列,php,zend-framework2,pdf-generation,dompdf,job-queue,Php,Zend Framework2,Pdf Generation,Dompdf,Job Queue,我正在尝试运行作业队列,以使用ZF中的slmquebeanstalkd和DOMPDFModule创建PDF文件 以下是我在控制器中执行的操作: public function reporteAction() { $job = new TareaReporte(); $queueManager = $this->serviceLocator->get('SlmQueue\Queue\QueuePluginManager'); $queue = $queueMa

我正在尝试运行作业队列,以使用ZF中的
slmquebeanstalkd
DOMPDFModule
创建PDF文件

以下是我在控制器中执行的操作:

public function reporteAction()
{

    $job = new TareaReporte();
    $queueManager = $this->serviceLocator->get('SlmQueue\Queue\QueuePluginManager');
    $queue = $queueManager->get('myQueue');
    $queue->push($job);
    
    ...

}
这就是工作:

namespace Application\Job;

use SlmQueue\Job\AbstractJob;
use SlmQueue\Queue\QueueAwareInterface;
use SlmQueue\Queue\QueueInterface;
use DOMPDFModule\View\Model\PdfModel;

class TareaReporte extends AbstractJob implements QueueAwareInterface
{

    protected $queue;

    public function getQueue()
    {
        return $this->queue;
    }

    public function setQueue(QueueInterface $queue)
    {
        $this->queue = $queue;
    }

    public function execute()
    {
        $sm = $this->getQueue()->getJobPluginManager()->getServiceLocator();
        $empresaTable = $sm->get('Application\Model\EmpresaTable');
        $registros = $empresaTable->listadoCompleto();
        $model = new PdfModel(array('registros' => $registros));
        $model->setOption('paperSize', 'letter');
        $model->setOption('paperOrientation', 'portrait');
        $model->setTemplate('empresa/reporte-pdf');

        $output = $sm->get('viewPdfrenderer')->render($model);

        $filename = "/path/to/pdf/file.pdf";
        file_put_contents($filename, $output);
    }
}
第一次运行该任务时,将创建该文件并成功完成工作,但是,如果第二次运行该任务,则该任务将被掩埋而不会创建该文件


在第二次尝试渲染模型时,它似乎处于一个无休止的循环中。

我遇到了一个类似的问题,结果是因为ZendPdf\PdfDocument重用其对象工厂的方式。您是否使用ZendPdf\PdfDocument

您可能需要正确关闭工厂

class MyDocument extends PdfDocument
{
    public function __destruct()
    {
        $this->_objFactory->close();
    }
}
尝试添加这个或类似于PdfDocument类的内容

更新:您似乎没有使用PdfDocument,但我怀疑这是相同的问题。您是否能够在正常http请求中重新生成第二个PDF?确保每次运行时环境平等是您的工作。
如果您无法克服此问题,短期快速解决方案将是将SLMQUE的max_runs配置设置为1。这样,在每次作业后,工作进程都会停止,并重置为普通状态…

感谢您花时间作出响应。您的答复很有帮助。我无法找到导致此问题的原因。对于现在,我选择了快速修复集max_runs SlmQueue为1。在每个作业正确创建pdf文档后停止工作进程。