Php ZF2-使用SLMQUEBEANSTALKD和DOMPDFModule创建PDF文件的作业队列
我正在尝试运行作业队列,以使用ZF中的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
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文档后停止工作进程。