DBアダプタ
DBアダプタはデータベースをメッセジキューの格納するアダプタで、Zend_DBコンポーネントを経由してデータベースへとアクセスします。Zend_DBコンポーネントが対応しているデータベース全てを利用することができます。
なお、ここではMySQLを利用することを想定して説明し、データベース「codezine_sample」上に、ユーザ「codezine」でローカルホストからパスワードなしでアクセスするとします。また、codezineユーザにはcodezine_sampleデータベースへの全てのアクセス権限があるとします。
準備
まず、メッセージキューを格納するためのテーブルをcodezine_sampleデータベース上に作成します。このテーブルを作成するためのスクリプトはZend Framework内の「library/Zend/Queue/Adapter/Db」にあります。MySQLの設定スクリプトは「mysql.sql」で、この中では「message」テーブルと「queue」テーブルの作成と設定を行っています。
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; 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;
このスクリプトを「codezine_sample」データベースに対して実行します。なお、MySQL以外にはPostgreSQL用の「postgresql.sql」、SQLite用の「queue_sqlite.sql」も準備されています。
コンストラクタ
コンストラクタでは利用するデータベースに関する情報を設定します。これらの設定の基本的にはデータベースZend_DBコンポーネントに渡されます。
名前 | 意味 |
name | メッセージキューの名前 |
driverOptions.type | 利用するZend_DBのアダプタ |
driverOptions.host | データベースのあるホスト、デフォルトでは'127.0.0.1' |
driverOptions.port | データベースにアクセスするためのポート |
driverOptions.username | アクセスのためのユーザ名 |
driverOptions.password | アクセスのためのパスワード |
driverOptions.dbname | メッセージキューのあるデータベースの名前 |
options.Zend_Db_Select::FOR_UPDATE | データベースの更新にSQLのSELECT文を利用するかどうか |
なお、この表の「.」は配列の配列を表しています。例えば「driverOptions.type」は「$options['driverOptions']['type']」に設定する値です。また、最後の「options.Zend_Db_Select::FOR_UPDATE」はデーアベースを更新するのにSELECT文を利用するかを設定するためのものです。SELECT文によるデータベースの更新は上手に使えば効率良くデータベースを更新できますが、これに対応していないデータベースサーバーもあるので注意して下さい。
ここで先程作成したテーブルを利用して「codezine_queue」なるメッセージキューを作成してみることにします。
//(1)オプション $options = array( 'name' => 'codezine_queue', 'driverOptions' => array( 'host' => 'localhost', 'username' => 'codezine', 'password' => '', 'dbname' => 'codezine_sample', 'type' => 'pdo_mysql', ), 'options' => array( Zend_Db_Select::FOR_UPDATE => true ) ); //(2) コンストラクタ $queue = new Zend_Queue('Db', $options);
(1)でオプションを配列$optionに設定し、(2)でコンストラクタを作成しています。(2)のコンストラクタの1つ目の引数にアダプタ「Db」を指定し、オプションを「$option」で渡しています。
各メソッドの制限
DBアダプタについては、各メソッドに特に制限はありません。