好的我正在使用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
所以在一个终端我运行
$ stalk worker.rb
工作1个工作:[你好]
然后我运行潜行者档案
$ ruby stalker.rb
追踪者几乎立即按预期执行,因此没有阻止。
但工人大约需要10秒钟才能运行。我真的希望这10个工作更接近1秒,因为我希望它们并行运行。
关于下一个最佳步骤的任何建议吗?
更新: 我已经意识到我可以从不同的终端运行多个工作人员,它会更快地处理队列,例如2名工人将在大约一半的时间内完成这一过程。
答案 0 :(得分:1)
作为一个提示,您可能想要查看我创建的名为Backburner的新gem,这是一种更现代的方法来管理ruby中beanstalkd的异步作业。它遵循一个更干净的resque-esque接口,具有真正的异步工作程序(使用分叉和多个线程以实现更快的吞吐量)并且具有更好的错误处理和重试支持。在写backburner之前我使用了潜行者2年,因为我想要一个更好的解决方案。
它为您提供以下支持:
SomeObject.async(:pri => 1000, :delay => 2).some_method(1, 2, 3)
然后将该方法自动排入beanstalkd并由backburner worker异步处理。
答案 1 :(得分:0)
Stalker.enqueue有3个选项:作业名称字符串,参数哈希,选项哈希。 在选项哈希中,您可以传递启动所需的秒数。 例如:
Stalker.enqueue('hello',{},{:delay => 5})