goworkerというのがある。
http://www.goworker.org/
golangで作りたいのが出てきたので、とりあえず動かしてみた。
// hello.go package main import ( "fmt" "github.com/benmanns/goworker" ) func init() { goworker.Register("Hello", helloWorker) } func main() { if err := goworker.Work(); err != nil { fmt.Println("Error:", err) } } func helloWorker(queue string, args ...interface{}) error { fmt.Println("Hello, world!") return nil }
# enqueue.rb require "resque" class Hello @queue = :hello end 100.times { Resque.enqueue(Hello) }
$ ls hello.go enqueue.rb $ go get github.com/benmanns/goworker $ go build $ ls hello hello.go enqueue.rb $ gem install resque $ redis-server $ ./hello -queues=hello $ ruby enqueue.rb
ジョブ自体は色んなプロジェクトで同じなので、別にgoでいいのだけど、ジョブが失敗したときの処理はウェッブアプリケーションと同じ言語で書きたいとかあって、それがgoじゃないとかあると思うのだけど、resque:failureとかそんな名前のキーに入るのでそれを見てあれこれみたいなのも出来る。
失敗した数合計の数とかも取れるのでそれが急増したらやばいよやばいよ〜ってアラートとかも出来る。resqueと同じ。