2010年1月6日水曜日

MacでTheSchwartz使ってみた

スズキです。

「4Gbpsを超えるWebサービス構築」の第二章(キューイング)で紹介されている、
http://www.amazon.co.jp/gp/product/4797354364?tag=iretsuzusblog-22
キューイングシステムTheSchwartzを試してみました。
(もう一つのGearmanはTheSchwartzがあればいいかな?と…)

ActiveMQなどは実業務で使ったこともありますが、LL言語などの案件で、
わざわざJava引っ張り出すのもどうかなー、と思い、試してみました。

まずはDB(MySQL)にテーブル群を作成します。
(MySQLは下記のようにMacPortsでインストールしています)
http://blog.suz-lab.com/2010/01/macportsmysql.html

ユーザーを作成して、
(myqsl)> GRANT ALL PRIVILEGES ON theschwartz.* TO
theschwartz@localhost IDENTIFIED BY 'xxxxxxxx'

データベース作って、
(bash)$ create database theschwartz character set utf8;

CREATE文探して、
(bash)$ perl -MCPAN -eshell;
cpan[1]> look TheSchwartz
(bash)$ cd doc

CREATE文実行って感じです。
(bash)$ mysql5 -u theschwartz -p theschwartz < schema.sql

次はPerlモジュールのDBD:mysqlをインストールです。

普通に
sudo cpan DBD:mysql
とすると、"mysql_config"が無い!ってエラーになってしまうので、

(bash)$ cd /opt/local/bin
(bash)$ sudo ln -s mysql_config5 mysql_config
(bash)$ sudo cpan -f DBD:mysql

とします。
※ どっちにしろテストでコケるので"forceオプション(-f)"つけときます。

そして、TheSchwartz(Perlモジュール)のインストールです。

(bash)$ sudo cpan -f TheSchwartz
※ こちらもテストでコケるので"forceオプション(-f)"です。

準備は整ったので、早速、プログラム(Perl)の作成です。

まずは、キューに溜まったジョブを処理するワーカーを作成します。

--------【worker.pl】--------
package SampleWorker;

use strict;
use warnings;
use base qw(TheSchwartz::Worker);

sub work {
  my ($class, $job) = @_;
  print("work\n");
  $job->completed();
}

package main;

use strict;
use warnings;
use TheSchwartz;

my $client = TheSchwartz->new(
  databases => [{
    dsn => "dbi:mysql:theschwartz",
    user => "theschwartz",
    pass => "xxxxxxxx"
  }],
);

print("start\n");
$client->can_do('SampleWorker');
$client->work();
--------

下記のように実行すると、処理待ち状態になります。
(bash)$ perl ./worker.pl

そして、下記のように、ジョブをキューに登録すると、
ジョブに応じたワーカーの処理が実行されます。
(bash)$ perl ./client.pl

--------【client.pl】--------
use strict;
use warnings;
use TheSchwartz;

my $client = TheSchwartz->new(
  databases => [{
    dsn => "dbi:mysql:theschwartz",
    user => "theschwartz",
    pass => "xxxxxxxx",
  }]
);

my $handle = $client->insert(
  "SampleWorker" => {}
);
--------

Webシステムの画像変換/合成処理は、これとPerlとImageMagickを...

--------
http://www.suz-lab.com

0 コメント: