Я получил код полезной в следующей ссылке:
http://dennisgurnick.com/2011/09/29/zend-queue-with-mysql/
И я сделал точно так же, как и на сайте проинструктированы:
; file: application/configs/application.ini
[production]
; ...
resources.frontController.params.displayExceptions = 0
; ...
queue.driverOptions.type = "pdo_mysql"
queue.driverOptions.host = "localhost"
queue.driverOptions.username = "howtoqueue"
queue.driverOptions.password = "howtoqueue"
queue.driverOptions.dbname = "howtoqueue"
Добавлено следующий код в Boostrap.php файл:
<?php
// file: application/Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initQueue()
{
$options = $this->getOptions();
$queueAdapter = new Zend_Queue_Adapter_Db($options[ 'queue' ]);
Zend_Registry::getInstance()->queueAdapter = $queueAdapter;
}
}
Также добавлен еще один файл внутри Библиотека, но я не понимаю, почему этот файл добавлен.
<?php
// file: library/EmailPopo.php
class EmailPopo
{
private $_data = array();
public function __get($key) {
return $this->_data[$key];
}
public function __set($key, $value) {
$this->_data[$key] = $value;
}
}
Добавлен ниже код в IndexController:
// file: application/controllers/IndexController.php
require_once "EmailPopo.php";
public function indexAction()
{
$queueAdapter = Zend_Registry::getInstance()->queueAdapter;
$options = array('name' => 'emailqueue');
$queue = new Zend_Queue($queueAdapter, $options);
$email = new EmailPopo();
$email->date = time();
$email->from = "[email protected]";
$email->to = "[email protected]";
$email->subject = "I want a divorce";
$email->body = "Letter's in the mail.";
$message = base64_encode(gzcompress(serialize($email)));
$queue->send($message);
}
public function queueAction() {
$queueAdapter = Zend_Registry::getInstance()->queueAdapter;
$options = array('name' => 'emailqueue');
$queue = new Zend_Queue($queueAdapter, $options);
$messages = $queue->receive(2);
foreach($messages as $message) {
try {
$email = unserialize(gzuncompress(base64_decode($message->body)));
$queue->deleteMessage($message);
echo sprintf(
"Sent email to %s (time: %s)<br/>",
$email->to,
new Zend_Date($email->date)
);
} catch(Exception $ex) {
echo "Kaboom!: " . $ex->getMessage() . "<br/>";
}
}
die("Done");
}
Для того, чтобы быть открытым и откровенным этот код, кажется, работает как Я получаю «DONE», как O/P, который был закодированной в фильеру ('Готово');
Если я запускаю код сначала я получил выход следующим:
Sent email to [email protected] (time: current time)<br/>
Done
Когда я снова запустить тот же файл, он Выдает
Done
один, я, но запутался, почему Он дает разные варианты в разных экземплярах. Через несколько часов, если я снова запустил код, он даст мне первый O/P.
DB Изменения:
У меня есть 2 таблицы для этого приложения они:
- сообщение
- очереди
1.Message:
CREATE TABLE IF NOT EXISTS `message` (
`message_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`queue_id` int(10) unsigned NOT NULL,
`handle` char(32) DEFAULT NULL,
`body` varchar(8192) NOT NULL,
`md5` char(32) NOT NULL,
`timeout` decimal(14,4) unsigned DEFAULT NULL,
`created` int(10) unsigned NOT NULL,
PRIMARY KEY (`message_id`),
UNIQUE KEY `message_handle` (`handle`),
KEY `message_queueid` (`queue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
ALTER TABLE `message`
ADD CONSTRAINT `message_ibfk_1` FOREIGN KEY (`queue_id`) REFERENCES `queue` (`queue_id`) ON DELETE CASCADE ON UPDATE CASCADE;
2 .Queue
CREATE TABLE IF NOT EXISTS `queue` (
`queue_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`queue_name` varchar(100) NOT NULL,
`timeout` smallint(5) unsigned NOT NULL DEFAULT '30',
PRIMARY KEY (`queue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
Эти две структуры являются структурой БД. Я могу видеть некоторые данные, вставленные в таблицу Queue, но я не знаю, на что это повлияет?
Просьба помочь мне разобраться в структуре очереди и сценария.
Хорошо ли работает? Если я понимаю Above Logic и надеюсь, что я смогу создать очередь DB для выполнения запросов в Zend. Я пытаюсь получить какое-то объяснение.
Копия & Вставить код не очень хорошо программировать, Знать, что я делаю, хорошо!
Спасибо! Любая помощь будет высоко оценена!
http://stackoverflow.com/questions/15971532/query-builder-using-zend-framework – TomPHP