ダウンロード サンプルファイル (1.7 KB)
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アダプタについては、各メソッドに特に制限はありません。
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
