facebook twitter hatena line email

Php/zend framework/zend queue/db

提供: 初心者エンジニアの簡易メモ
2016年3月19日 (土) 20:18時点におけるAdmin (トーク | 投稿記録)による版 (シンプルqueueサンプル)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

db用意

create database messaging default character set utf8;

Zend/Queue/Adapter/Db/mysql.sql

DROP TABLE IF EXISTS `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;

DROP TABLE IF EXISTS `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;

ALTER TABLE `message`
  ADD CONSTRAINT `message_ibfk_1` FOREIGN KEY (`queue_id`) REFERENCES `queue` (`queue_id`) ON DELETE CASCADE ON UPDATE CASCADE;

シンプルqueueサンプル

    $options = array(
        'driverOptions' => array(
            'host'      => 'localhost',
            'username'  => ,
            'password'  => ,
            'dbname'    => 'messaging',
            'type'      => 'pdo_mysql',
            'port'      => 3306, // optional parameter.
        ),
        'options' => array(
            // 更新のためにZend_Db_Selectを使います。
            // 全てのデータベースがこのフィーチャをサポートできるわけではありません。
            Zend_Db_Select::FOR_UPDATE => true
        ),
        'name' => 'queue1'
    );
    // データベース待ち行列を作成
    $queue = new Zend_Queue('Db', $options);
    // 待ち行列のメッセージ数の取得 (SPL由来の Countable インターフェイスをサポート)
    echo count($queue);
    // 待ち行列からメッセージを5件取り出す
    $messages = $queue->receive(5);
    foreach ($messages as $i => $message) {
        echo $message->body. "\n";
        //メッセージを処理しました。今待ち行列から除去します。
        $queue->deleteMessage($message);
    }
    // 現在アクティブな待ち行列にメッセージを送信
    $queue->send('My Test Message');

複数queueサンプル

    $options = array(
        'driverOptions' => array(
            'host'      => 'localhost',
            'username'  => ,
            'password'  => ,
            'dbname'    => 'messaging',
            'type'      => 'pdo_mysql',
            'port'      => 3306, // optional parameter.
        ),
        'options' => array(
            // 更新のためにZend_Db_Selectを使います。
            // 全てのデータベースがこのフィーチャをサポートできるわけではありません。
            Zend_Db_Select::FOR_UPDATE => true
        ),
        'name' => 'queue1'
    );
    // データベース待ち行列を作成
    $queue = new Zend_Queue('Db', $options);
    // 待ち行列一覧の取得
    foreach ($queue->getQueues() as $name) {
        echo $name, "\n";
    }
    // 新規待ち行列の作成
    $queue2 = $queue->createQueue('queue2');
    // 待ち行列のメッセージ数の取得 (SPL由来の Countable インターフェイスをサポート)
    echo count($queue);
    // 待ち行列からメッセージを5件取り出す
    $messages = $queue->receive(5);
    foreach ($messages as $i => $message) {
        echo $message->body, "\n";
        //メッセージを処理しました。今待ち行列から除去します。
        $queue->deleteMessage($message);
    }
    // 現在アクティブな待ち行列にメッセージを送信
    $queue->send('My Test Message');
    // 作成した待ち行列と、そのすべてのメッセージを削除
    $queue->deleteQueue('queue2');