この例では、Zend_Queue を使用してバックグラウンド タスクを実行する方法を示します。この特定の例では、Zend_Queue と cronjob を使用してバックグラウンドで請求書を生成しています。Zend_Queue は初期化され、ブートストラップに登録されています。
ジョブの作成、My_Job ソースは次のとおりです。
class My_Job_SendInvoice extends My_Job
{
protected $_invoiceId = null;
public function __construct(Zend_Queue $queue, array $options = null)
{
if (is_array($options)) {
$this->setOptions($options);
}
parent::__construct($queue);
}
public function job()
{
$filename = InvoiceTable::getInstance()
->generateInvoice($this->_invoiceId);
return is_file($filename);
}
}
サービスまたはモデル内のどこかで、ジョブを登録します。
$backgroundJob = new My_Job_SendInvoice(Zend_Registry::get('queue'), array(
'invoiceId' => $invoiceId
));
$backgroundJob->execute();
バックグラウンド スクリプトの作成:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..'));
// temp, environment should be specified prior execution
define('APPLICATION_ENV', 'development');
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
require_once 'Zend/Application.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
/* @var $queue Zend_Queue */
$queue = Zend_Registry::get('queue');
$messages = $queue->receive(5);
foreach ($messages as $i => $message) {
/* @var $job My_Job */
$job = unserialize($message->body);
if ($job->job()) {
$queue->deleteMessage($message);
}
}