ZendQueueとKestrelでメッセージキューサーバーを体験

  • 5
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Kestrel

Scalaで書かれたメッセージキューサーバー。Twitterで使われてるらしいです。

Twitterで使っているScalaで書かれたオープンソースのメッセージキューサーバー、Kestrel :侍ズム#samuraism

インストールと起動

$ curl -O http://robey.github.com/kestrel/download/kestrel-2.4.1.zip
$ unzip kestrel-2.4.1.zip
$ cd kestrel-2.4.1
$ sudo java -jar kestrel_2.9.2-2.4.1.jar

ZendQueue

Zend Frameworkのコンポーネントの1つで、メッセージキューを利用するために使います。  

GitHub
https://github.com/zendframework/ZendQueue

メッセージを格納する方法によって複数のアダプタが用意されています。

Kestrel用のアダプタはありませんが、Kestrelはmemcachedプロトコルをサポートしているので、MemcacheQアダプタを利用します。

Memcache

あらかじめMemcachedライブラリもインストールしておいて下さい。

Macの場合はHomebrewを使うと簡単にインストールできます♪

$ brew install memcached
$ brew install memcache-php

メッセージキューサーバーを体験

2つのスクリプトを用意してください。

・worker.php : ワーカープロセス。キューからメッセージを取得して表示する。

<?php
// worker.php
$options = array(
  'name' => 'ack_queue',
    'driverOptions' => array(
        'host' => 'localhost',
        'port' => '22133',
        ),
    );

$queue = new ZendQueue\Queue('MemcacheQ', $options);

for (;;) {
    $messages = $queue->receive(1);
    foreach ($messages as $mess) if ($mess->body) echo $mess->body . PHP_EOL;
}

・front.php : キューにメッセージを送信する。

<?php
// front.php
$options = array(
  'name' => 'ack_queue',
    'driverOptions' => array(
        'host' => 'localhost',
        'port' => '22133',
        ),
    );

$queue = new ZendQueue\Queue('MemcacheQ', $options);
$queue->send('Hello, World!');

ターミナルを2つたちあげてください。

・ターミナル1でworker.phpを実行

プロンプトが返ってこない → Kestrelのキューを監視してくれています。

・ターミナル2でfront.phpを実行すると…

ターミナル1に「Hello, World!」と表示されます!

簡単ですが以上です。

Hello, Worldが表示された時には感動しますね (・∀・)

worker.phpを実行するターミナルを増やしたりするとなお楽しくなってきます♪

参考

Twitterで使っているScalaで書かれたオープンソースのメッセージキューサーバー、Kestrel :侍ズム#samuraism

PHP+Kestrel+Supervisorでお手軽タスクキューイング :アシアルブログ

PHPアプリでメッセージキューサーバを活用する - Zend_Queue - :CodeZine