kue(npm)を試してみた

Posted by joeartsea on 2014-01-06

あけましておめでとうございます。

ちょっと最近、前回のアプリも含めて様々な構成のシステムを連携させて動かすことが多くなってきたので、そういうのを綺麗に管理する手法?っぽいものを模索してました。

結果的にAWSのSWF(Simple Workflow Service)で移行という結論になったのですが、金のかからない方法としてnpmパッケージのkueも試したので今回の記事ではkueについてまとめます(SWFは多分ウフル技術ブログでやります)

kueはひとつの処理を「job」と呼んでいて、このjobをredisに保存して管理するようです。ですのでredisが使える環境で試しますが、redis自体のインストールなどは割愛します。

まず、kueアプリ用のディレクトリを作成してkueをインストールします。

1
2
3
$ mkdir kue-sample
$ cd kue-sample
$ npm install kue

次に最もシンプルな状態で起動させます。

1
2
3
4
$ vi app.js
var kue = require('kue');
kue.app.listen(3000);
$ node app.js

この状態でブラウザでlocalhost:3000にアクセスしてみると以下のような画面が表示されます。多分これjobの管理画面でjobを突っ込んだりするとココに表示されるんでしょうね。

jobdash

あとはAPIでjobの登録や抽出を以下のようにして行います。

jobの登録。

1
2
3
4
5
6
7
8
9
10
11
12
$ curl -H "Content-Type: application/json" -X POST -d '{
"type": "email",
"data": {
"title": "welcome email for tj",
"to": "[email protected]",
"template": "welcome-email"
},
"options" : {
"attempts": 5,
"priority": "high"
}
}' http://localhost:3000/job

以下のようなレスポンスがあってjobが登録されます。管理画面で確認できます。

1
2
3
4
{
"message": "job created",
"id": 1
}

jobの抽出。

1
$ curl -X GET http://localhost:3000/job/search?q=welcome%20email%20for%20t

以下のようにIDが返ってきます。

1
2
3
[
"1"
]

jobのID指定。

1
$ curl -X GET http://localhost:3000/job/1

ID指定でjobの詳細が返ってきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"id": "1",
"type": "email",
"data": {
"title": "welcome email for tj",
"to": "[email protected]",
"template": "welcome-email"
},
"priority": -10,
"progress": 0,
"state": "inactive",
"created_at": "1388992947064",
"updated_at": "1388992947064",
"attempts": {
"remaining": null,
"max": "5"
}
}

と、まあ自前のAWSのSQSみたいに利用可能です。

詳しくはLearnBoost / kue