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');
