2012-11-14 67 views
0

好吧,我正在用Stalker和Beanstalkd做一些測試。我的目標是卸載500kb的發佈請求以排隊並異步處理它們。異步跟蹤/豆莖處理作業

到目前爲止,在我的測試中,我有這個非常簡單的例子。

#worker.rb 
require 'stalker' 
include Stalker 

job 'hello' do |args| 
    puts "hi" 
    sleep 1 
    puts "hello" 
end 

並將該文件添加到隊列

# stalker.rb 
require 'rubygems' 
require 'stalker' 

10.times do 
    Stalker.enqueue('hello') 
    puts 'queued' 
end 

因此,在一個終端我跑

$稈worker.rb
工作職位1:你好]

然後我運行stalker文件

$紅寶石stalker.rb

死纏爛打執行幾乎立即如預期等等,沒有阻塞。

但工人需要大約10秒鐘才能運行。真的,我希望這10個職位的接近1秒,因爲我希望他們能夠平行運行。

任何關於下一步最佳步驟的建議?

更新: 我意識到我可以在不同的終端上運行多個工作人員,並且它可以更快地處理隊列,例如, 2名工人將在大約一半的時間內完成這一過程。

回答

1

作爲擡起頭來,你可能想看看新的寶石,我創建了一個名爲Backburner這是管理與紅寶石beanstalkd異步作業更現代的方式。它遵循一個更清晰的resque-esque接口,擁有一個真正的異步工作者(使用分叉和多線程以獲得更快的吞吐量),並具有更好的錯誤處理和重試支持。在編寫加力燃燒器之前,我使用了追蹤器2年,因爲我想要一個更好的解決方案。

它給你的東西支持像:用該方法然後被自動排隊到beanstalkd和工人里亞茲霍哈爾異步處理

SomeObject.async(:pri => 1000, :delay => 2).some_method(1, 2, 3) 

0

Stalker.enqueue需要3個選項:作業名稱字符串,參數散列,選項散列。 在選項散列中,您可以傳遞啓動所花費的秒數。 例如:

Stalker.enqueue('hello',{},{:delay => 5}) 
+0

好的,但如何幫助? –

+0

追獵者是指隊列。這意味着他只需要一份工作,據我所知這不是平行的。也許你應該嘗試別的。 –

+1

根據我的更新,它看起來像運行多個工作人員在paralell –