Php/zend framework/zend queue/db
提供: 初心者エンジニアの簡易メモ
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');