コントローラーからデータを取得するためにrabbitmqキューを使用しており、コンシューマーサービスがデータを処理し、php-excelを使用してExcelシートを生成しています。
私が直面している問題は、コンシューマーが 1 つしか実行されていない場合に Excel シートでデータが上書きされることです。複数のコンシューマーを実行すると、問題はほとんど解決されます。
私はsymfony2のrabbitmqタイプとluiggio Excelバンドルとして直接使用しています。
誰かが同様の問題を抱えたことはありますか?考えられる問題についてのヒントは大歓迎です。
// コンシューマ コードの一部
public function execute(AMQPMessage $msg)
{
$data = array();
$data = unserialize($msg->body);
if ($data['type'] == 'sometype') {
$this->excel->excelObj->getProperties()->setCreator("something");
$value = $this->excel->excelObj->setActiveSheetIndex(0);
$value->setCellValue('A1', 'Some Number');
$value->setCellValue('B1', 'Some Other Number');
$incr = 2;
foreach ($data['somedata'] as $datum) {
value->setCellValue('A'.$incr, $datum['that_number']);
value->setCellValue('B'.$incr, $datum['that_number']);
}
} else if ($data['type'] == 'sometype2') {
$this->excel->excelObj->getProperties()->setCreator("something");
$value = $this->excel->excelObj->setActiveSheetIndex(0);
$value->setCellValue('A1', 'Some Number2');
$incr = 2;
foreach ($data['somedata'] as $datum) {
value->setCellValue('A'.$incr, $datum['that_number']);
}
}
$this->excel->excelObj->getActiveSheet()->setTitle('Simple');
$this->excel->excelObj->setActiveSheetIndex(0);
$tempName = $data['type'] .microtime(). '.xls';
$this->excel->getStreamWriter()->write('/tmp/'.$tempName);
}