2013-04-12 4 views
1

Я новичок в ZEND, и я работаю над версией (ZEND 1.11.1) Я пытаюсь реализовать ZEND_QUEUE в своем приложении zend, и для меня нет подходящего учебника. Всюду я пытаюсь реализовать Очередь.Zend Framework Внедрение ZEND_QUEUE

Я разрабатываю очередь для БД. Приложение работает, нравится следующий поток: 1. Пользователь вводит SQL-запрос через приложение и ждет результата. 2. Запрос будет передан в QUEUE и обработан с базой данных после успешного завершения запроса. Запрос должен отправить результат, отправленный пользователю.

Внутри моего контроллера:

class IndexController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
    $options = array(
     'name'   => 'queue1', 
     'driverOptions' => array(
     'host'  => '127.0.0.1', 
     'port'  => '3306', 
     'username' => 'queue', 
     'password' => 'queue', 
     'dbname' => 'queue', 
     'type'  => 'pdo_mysql' 
      ) 
     ); 

     // Create a database queue. 
     // Zend_Queue will prepend Zend_Queue_Adapter_ to 'Db' for the class name. 
     $queue = new Zend_Queue('Db', $options); 
     foreach ($queue->getQueues() as $name) { 
      echo $name, "\n"; 
     } 
     $queue->send('My Test Message'); 
    } 
} 

Проблема, которую я облицовкой я не могу понять, в какой папке я хочу, чтобы добавить код.

Я не использую МОДЕЛИ в своем приложении, так как требование для приложения заключается в использовании только CONTROLLER и VIEW.

Кроме того, когда я пытаюсь степени Zend_Queue_Adapter_Db я получаю следующее сообщение об ошибке:

Фатальная ошибка: Class 'ZendJobQueue' не найден

или

Фатальная ошибка: Uncaught исключение 'Zend_Controller_Dispatcher_Exception' с сообщение «Недопустимый контроллер указан (ошибка)» в папке F: \ wamp \ www \ helloworld \ library \ Zend \ Controller \ Dispatcher \ Standard.php: 242 Трассировка стека: # 0 F: \ wamp \ www \ helloworld \ library \ Zend \ Контроллер \ Front.php (946):

Просьба посоветуйте мне правильную папку или любой учебник, который поможет начинающему работать с ZEND JOBQUEUE.

ответ

1

Я получил код полезной в следующей ссылке:

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. сообщение
  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. Я пытаюсь получить какое-то объяснение.

Копия & Вставить код не очень хорошо программировать, Знать, что я делаю, хорошо!

Спасибо! Любая помощь будет высоко оценена!

+0

http://stackoverflow.com/questions/15971532/query-builder-using-zend-framework – TomPHP

Смежные вопросы