mongodb と ruby(mongoid) で FIFO キューを作成することは可能でしょうか。
上限付きコレクションを使用しようとしていますが、キューをポップする方法がわかりません。これを行うためのメソッドがコレクションにないようです。
私が今していることは次のとおりです。
$fifo = Mongo::Connection.new.db("fifo")
queue = "#{queue_name}_#{queue_type}"
unless $fifo[queue].find.present?
$fifo.command(create: queue, capped: true, size: 10000000, max: 1000)
end
$fifo[queue].insert(url: "http://www.example.com/unique001")
$fifo[queue].insert(url: "http://www.example.com/unique002")
$fifo[queue].insert(url: "http://www.example.com/unique003")
これにより、(コンソールから)次のようなキャップ付きコレクションが得られます
> db.test001_high.find()
{ "_id" : ObjectId("503c4714236f440e9c000001"), "url" : "http://www.example.com/unique001" }
{ "_id" : ObjectId("503c4714236f440e9c000002"), "url" : "http://www.example.com/unique002" }
{ "_id" : ObjectId("503c4714236f440e9c000003"), "url" : "http://www.example.com/unique003" }
私が疑問に思っているのは、Ruby でこのコレクションにブロッキング ポップを表示する方法はあるのでしょうか? 私は mongodb にあまり詳しくなく、redis のように fifo キューを作成しようとしているだけだと言わざるを得ません。したがって、おそらく私はこの問題に間違った方法で取り組んでいます。