はじめに
本連載では、PHP上で動作するアプリケーションフレームワークであるZend Frameworkについて紹介しています。今回は前回に続き、分散アプリケーション間でのデータのやりとりを行うための方法の一つである「メッセージキュー」を利用するためのZend_Queueコンポーネントを紹介します。
今回は、Zend_Queueのアダプタ(MemcacheqアダプタとPlatformJobQueueアダプタ)の紹介、次に自分でアダプタを作成する方法、そしてStompプロトコルを利用してメッセージキュー管理サーバにアクセスする方法について説明します。
対象読者
PHPの基本構文については一通り理解している方を対象としています。
必要な環境
Zend FrameworkはPHP 5.2.4以降とWebサーバがインストールされている環境で利用可能です。本稿ではWebサーバとしてApache 2.2を、OSにWindows XPを採用し、アプリケーションを作成していきます。
以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、「サーバサイド技術の学び舎 - WINGS」より「サーバサイド環境構築設定手順」を参照ください。
- Windows XP SP3
- PHP 5.3.4
- Apache 2.2.17
LinuxやFreeBSDなどUNIX系OSをお使いの方もコマンドはほぼ一緒なので、パスなどは適宜読み替えてください。
メッセージキューサーバの特徴
Zend_Queueコンポーネントのアダプタは、前回紹介した3種類に加えて今回紹介する2種類で5種類全てが出揃います。ここで、それぞれのアダプタがメッセージを格納する方法について、特徴をまとめておきます。
名前 | 格納方法 | 長所 | 短所 |
Array | PHPの配列 | 簡単に利用できる | プロセス間の通信には使えない、テスト用 |
Activemq | Apache ActiveMQ | 本格的なメッセージキューサーバを利用 | 複数のキューに対応していない |
Memcache | MemcacheQ | 高速 | タイムアウトが使えない、UNIX系の環境が必要 |
Db | Zend_Db | さまざまなDBを利用できる | メッセージキュー専用サーバでない |
PlatformJobQueue | Zend PlatformのJob Queue | ジョブを直接登録 | 古いプラットフォームにのみ対応 |
Arrayアダプタは、ローカルな配列を利用しているため、プロセス間通信には使えません。あくまでもプログラムのテスト用だと思ってください。
Apache ActiveMQはメッセージキュー管理専用のサーバで、本格的な分散環境のメッセージングに利用できます。ただし、Activemqアダプタが対応していないため、createメソッド、deleteメソッド、getQueuesメソッドを利用できません。複数のキューを利用したい場合には、キューごとにZend_Queueオブジェクトを作成する必要があります。
MemcacheQはUNIX系の環境で動作する前提で作成されているため、Windows上で利用するのはひと工夫必要になります。また、通常のキューと違い、メッセージはキューから取得されたらすぐに削除されます。そのため、タイムアウト時間は意味がありませんし、deleteMessageメソッドを利用できません。
DbアダプタはZend_Dbコンポーネント経由でアクセスしたデータベースにメッセージを格納します。メソッド等に特に制限はありませんが、汎用のデータベースを利用するため、メッセージキュー管理専用のサーバと比べてパフォーマンスが低下する可能性があります。
Zend PlatformのJob Queueは通常のメッセージキュー管理サーバではなく、PHPのスクリプトをジョブとして登録するサーバです。ただし、最新のプラットフォームであるZend Serverではなく、少し古いZend Platformに対応した技術であるといった制限があります。