スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Task Queue を使ってみる

2010年06月01日 03:24

Google App Engine Java のTask Queue を使ってみる。

Twitter4JとGAEとCytoscapewebの練習(空目の可視化)で作ったアプリのデータをJDOを使って永続化するようにした。永続化が原因かどうかは分からないがレスポンスが遅くなったような気がしたので、Task Queueを使ってみることにする。基本的には、Task Queue Java API Overviewをみてやってみる。

1.WEB-INF/queue.xmlの作成
Java Task Queue Configurationによると、こんな感じでいいみたい。

<queue-entries>
<queue>
<name>default</name>
<rate>5/s</rate>
</queue>
</queue-entries>




2.Memcacheに値を格納しておく。
今まで同期的にDatastoreにputしていたオブジェクトを一旦Memcacheに入れておく。
Memcache java API 概要を参考に。

cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
cache.put(key, obj);
(例外処理など略)



3.Queueに追加する処理を書く
Using Task Queue in Javaによると、以下のようにすると、defaultキューが取得できるようだ。

Queue queue = QueueFactory.defaultQueue();
queue.add(url("/worker").param("key", key));
(例外処理など略)


サンプルはstatic importを使っているが、Eclipse は static import があるとコード補完がうまく働かなくなるようなので注意。

4.Web Hook を書く。
普通のサーブレットを書く、web.xmlにも(この例だと/workerというパスを)記述する。このサーブレットにパラメータ"key"でobjをmemcacheにputした際のkeyが渡ってくる。HTTPメソッドは特に指定しない場合、POSTが使われるので注意。その後、cacheからgetして、Datastoreに永続化する。

cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
Object obj = cache.get(key);
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(obj);
(例外処理など略)



以上。問題なく動いたが、劇的に動作が速くはならなかった。原因は永続化ではなかったようだ。
スポンサーサイト


コメント

    コメントの投稿

    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://aaatxt.blog57.fc2.com/tb.php/64-4699363a
    この記事へのトラックバック



    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。