go-workersを試してみた

こんにちは。家でジンギスカンをつくりました、きたけーです。

Go製のジョブキューライブラリを試してみたくなったので、jrallison/go-workers · GitHub をつかってみました。Sidekiq互換だそうです。

ワーカーの定義と起動

package main

import "fmt"
import "github.com/jrallison/go-workers"

func myJob(message *workers.Msg) {
  args := message.Args()
  // argsは go-simplejson をラップしたやつらしいので http://godoc.org/github.com/bitly/go-simplejson を参照する
  a := args.GetIndex(0).MustInt()
  b := args.GetIndex(1).MustInt()
  fmt.Println(a + b)
}

func main() {
  workers.Configure(map[string]string{
    "server": "localhost:6379",
    "database": "0",
    "pool": "30",
    "process": "1",
  })
  workers.Process("myqueue", myJob, 10) // 10 は並行数

  workers.Run()
}

ちなみに

workers.Process("myqueue", myJob, 10)
workers.Process("myqueue", myJob2, 10)

のように、同じ名前(myqueue)で設定すると、最後に登録した関数が実行されます。

ジョブを投げる

Sidekiq互換だからかもしれないけど、classの指定っているかなぁ...

workers.Enqueue("myqueue", "Add", []int{1, 2})