我们目前正在计划使用RabbitMQ的rails 3.2.2应用程序。我们想运行几种工人(和一些工人的实例)来处理来自不同队列的消息。工作人员用ruby编写,并放置在rails应用程序的lib目录中。带EventMachine和Rails的RabbitMQ
一些工作人员需要rails框架(活动记录,活动模型...),而其中一些则不需要。应该每分钟致电第一名工作人员检查是否有更新。当消息(由第一个工作人员发送)出现时,其他工作人员应该处理来自队列中的消息,并执行一些(耗时的)工作。
到目前为止,这么好。我的问题是,我只有像RabbitMQ这样的消息传递系统的经验,并且没有使用它们之间的导轨交互的经验。所以我想知道最好的做法是让这两个人一起玩。下面是我的要求再次:
- 的Rails 3.2.2应用
- 的RabbitMQ
- 几类工人的
- 一个工人的几个实例
- 控制工人的数量从轨道
- 工人们正在做耗时的任务,所以他们必须是异步的
- 只有少数员工需要rails框架。其他人都只是红宝石文件中包含净某些依赖或文件
我一直在寻找一些解决方案,并与两种可能想出了:
在一个新的线程使用AMQP与EventMachine的
当然,我不希望我的Rails应用在创建新工作人员时被阻止。工作人员应该在另一个线程中运行并异步执行其工作。此外,它不应该启动我的rails应用程序的新实例。它应该只需要工人需要的东西。
但是在一些文章中他们说Passenger有一些问题。另一个我不喜欢的事实是,我们正在使用webbrick进行开发,我们也应该包括这方面的解决方法。有可能切换到另一个像瘦的网络服务器,但我也没有任何经验。
使用某种daemonizing
也许它可以运行工人作为一个守护进程,但我不知道这会有多大的开销拿出,否则我怎么能控制工人的数量。
希望有人可以建议应该是一个很好的解决方案(我希望我自己清楚;)
我工作的同样的事情,还没有找到一个很好的答案,希望有人会看到这一点。 – 2012-04-09 14:58:09
我也希望如此);如果你找到一些有用的信息,甚至解决方案,请告诉我 – 23tux 2012-04-13 07:25:42