Memcacheqアダプタ
MemcacheQはMemcache上に実装された単純で高速なメッセージキュー管理サーバです。前回紹介したApache ActiveMQ同様、メッセージキューに特化したサーバなので利用方法も簡単です。
準備
MemcacheqアダプタはPHPのMemcacheモジュールを利用していますが、通常は無効になっています。PHPのMemcacheモジュールはPECLで提供されていますが、MemcacheモジュールをPECL経由でビルドするのは、Windowsでは多少の手間がかかります。ここはコンパイル済のDLLをダウンロードしてから、モジュールを有効にする方法を紹介します。
Windows向けにコンパイル済のモジュールはここから取得できます。ここにある「php_memcache-2.2.6-5.3-vc9-x86.zip」をダウンロードして、中にある「php_memcache.dll」をPHPの拡張が入っているフォルダ(extフォルダ)へコピーします。
その上でモジュールを有効にするためには、php.iniの末尾に次の一行を追加します。
extension=php_memcache.dll
また、MemcacheQはUNIX風のOSで利用されることを想定して開発されているため、Windowsから利用は難しいようです。利用したい場合にはLinux等が走っている外部サーバを準備して、その上でMemcacheQを実行するのが良いでしょう。
Linux等でMemcacheQを利用するためにはソースコードを入手し、コンパイルする必要があります。インストールの方法はここにありますが、要約すると次のようになります。
- (前提)Berkley DB 4.7以降をインストールしておく
- (前提)libevent 1.4以降をインストールしておく
- MemcacheQをコンパイルして実行
筆者の環境では、Memcacheqのバージョン0.2.0を取得/ソースコードを展開した上で、以下のようにMemcacheQをコンパイル/実行しました。
$./configure --with-bdb=/usr/local/BerkeleyDB.5.1 --with-event=/usr/local/ (configureの出力) $make (makeの出力) $mkdir ~/tmp/memcacheq $./memcacheq -r -H ~/tmp/memcacheq -v
Windows上でLinux風の環境を提供するシステムの一つにCygwinがあります。Windows上でMemcacheQを動作させたい場合にはCygwinを利用する方法があります。その場合には、ネットワークまわりに要求される機能の関係でCygwinのバージョン1.7以降を利用する必要があります。
コンストラクタ
MemcacheQは単純なメッセージキューサーバなので、ほとんど何も設定せずに利用することが可能です。コンストラクタで設定することができるオプションは次のとおりです。
| 名前 | 意味 |
| name | メッセージキューの名前 |
| driverOptions.host | MemcacheQが実行されているホスト、デフォルトでは'127.0.0.1' |
| driverOptions.port | データベースにアクセスするためのポート、デフォルトでは'22201' |
前回同様、名前に含まれる「.」は配列の配列を表しています。
//(1)オプション
$options = array(
'name' => 'codezine_queue',
'driverOptions' => array(
'host' => 'localhost',
'port' => '22201',
),
);
//(2) コンストラクタ
$queue = new Zend_Queue('MemcacheQ', $options);
(1)では与えられるオプションを全て設定していますが、例えばローカルホストでMemcacheQが動作している場合では「host」「port」のどちらも省略可能なため、指定する必要があるのは「name」だけになります。
各メソッドの制限
deleteMessageメソッドとcountメソッドを利用できません。
MemcacheQは、メッセージを取得した時点でキューからメッセージを削除します。そのため、メッセージを明示的に削除するdeleteMessageメソッドは利用できません。deleteMessageメソッドが呼び出された場合には例外が発生します。
また、MemcacheQはキュー内にあるメッセージを数える方法を提供していないため、countメソッドも利用できません。countメソッドが呼び出された場合も、やはり例外が発生します。
