木曜日, 4月 24, 2008

[PostgreSQL] PgQ

いまいち使い方が分からなかったPgQ(SkyToolsの一部であるジョブキューの仕組み)のお試しが出来たのでメモ.やることとしては,

  1. pgqadm.pyを使うためにPYTHONPATH環境変数をexport(skytools/lib/ython2.4/site-packages)
  2. 適用するデータベースを作る(ここでは"XXX"とする)
  3. pgplsqlがそのデータベースで使えるか確認(pg_languageカタログ/無いならcreatelang)
  4. share/skytools以下のsqlスクリプトを流す(txid.sql>pgq_ext.sql>pgq.sqlの順?)
  5. キューを"select * from pgq.create_queue(’mailer’)"で作成
  6. psqlで接続し"select * from pgq.queue"で確認
  7. tickerデーモンを起動する(例えば"../bin/pgqadm.py ./pgqadm.ini ticker -d")
  8. consumerデーモンをpythonで作る(※下にサンプルソースを掲示)
  9. consumerデーモンを起動する(例えば"../var/consumer.py consumer.ini -v")
  10. キューに入れてみる(入れるものをイベントと言う.例えば"select pgq.insert_event('mailer','welcome_email','tf0054@gmail.com')")

と言った感じ.こちらのサイトを参考にしたが,トリガを作ってイベント登録をさせる仕組みが面倒だったので直接インサートして実験.
また,サンプルのconsumerデーモンのPythonソースが一部実装されてないので,以下な感じで補完することが必要。
#!/usr/bin/python
import sys, os, pgq, skytools
import syslog

class Mailer(pgq.Consumer):
def sendWelcomeMail(self, params):
syslog.openlog("skycon")
syslog.syslog(params)
syslog.closelog()
return True

def process_batch(self, src_db, batch_id, ev_list):
for ev in ev_list:
d = ev.data
self.log.debug ("event : %s | type : %s | inserted by : %s" % (d, ev.type, ev.extra1))
if not self.sendWelcomeMail(d):
sys.exit(1)
ev.tag_done()

if __name__ == '__main__':
script = Mailer("mailer_daemon","src_db",sys.argv[1:])
script.start()

これを以下のとおり実行して、
./consumer.py ../etc/consumer.ini &

syslogにデータでるところまで確認できました.また,使える関数などはこちらで見られます.あれ?でも,,,
  • tickerは何をしてくれるんだっけ?
  • pgqadmのinstallってしてなかったけどいいの?

0 件のコメント: