0

我正在使用 Ruby 和 Sinatra 为 iPhone 应用程序构建一个简单的食谱搜索引擎,并将 RabbitMQ 用于我的消息队列。我环顾四周,为后台进程找到了许多不同的实现选择,但其中大多数要么实现自定义消息队列算法,要么作为 Rails 插件运行。

就可以与 RabbitMQ 很好地配合使用的与框架无关的高质量工作库而言,有哪些内容?

在编写工作代码时,是否有任何我应该牢记的最佳实践,除了显而易见的:

# BAD, don't do this!
begin
  # work
rescue Exception
end
4

3 回答 3

1

我正在使用 Beanstalk 并使用daemons gem编写了我自己的守护程序。Daemon kit是一个新项目,但尚未实现队列循环。如果它符合您的需求,您也可以查看Nanite ,它与框架无关。

于 2009-05-27T14:06:13.637 回答
1

我最终写了我自己的图书馆,在一阵无法控制的牦牛剃须中。守护程序套件是正确的总体思路,但对于我的需求来说太重了。我不希望我的每个守护进程看起来像一个完整的 Rails 应用程序。我最终会得到至少 3 个守护进程,那将是一大堆目录。daemons gem 有一个糟糕的 API,虽然我很想将它抽象出来,但我意识到自己管理 fork 可能更容易,所以我就是这样做的。

API 如下所示:

require "rubygems"
require "chaingang"

class Worker
  def setup
    # Set up connections here
  end

  def teardown
    # Tear down connections here
  end

  def call
    # Do some work
    sleep 1
  end
end
ChainGang.prepare(Worker.new)

然后您只需使用包含的 rake 任务来启动/停止/重新启动或检查状态。我从 Rack playbook 中获取了一个页面:任何实现该call方法的东西都是公平的游戏,作为 ChainGang.prepare 和 ChainGang.work 方法的参数,所以 aProc是一个有效的工作对象。

比起使用其他东西,我花了更长的时间来构建它,但我有一个模糊的怀疑,即从长远来看它会得到回报。

于 2009-05-29T18:01:46.470 回答
0

查看 nanite(用 Ruby 编写),这是一个在 rabbitmq 上编写的年轻项目。

github.com/ezmobius/nanite/tree/master

于 2009-05-30T05:20:05.650 回答