0

我有多个用 Node.js 编写的服务的前端和用 Ruby 编写的 worker。现在的问题是如何让这些沟通?我需要维护动态的工作人员池来处理负载(当负载增加时产生更多的工作人员)并且消息相当大~2-3M,因为我正在通过 Node.js 前端向用户上传的工作人员发送图像。因为我想要很好的扩展性,所以我考虑了一些排队解决方案,但我没有找到任何现有的解决方案(或被误解的指南)可以提供:

  1. 后备机制。到目前为止,我发现的解决方案只有一个故障点 - 消息代理,并且没有办法提供回退。
  2. 序列化。因此,当代理失败时,任务不会丢失。
  3. 传递重要信息的能力。
  4. Ruby 和 Node.js 的简易 API
  5. 一些用于跟踪队列大小的 API,以便我可以重新安排工作池。
  6. 最好是轻量级的。

也许我的方法是错误的?也许我不应该使用队列而是其他方式?或者有一些符合上述要求的排队解决方案?

4

3 回答 3

1

最终,我采用了ZeroMQ队列解决方案。非常快速、健壮和轻量级的实现。必须编写自己的经纪人,但这是此解决方案的唯一缺点。

于 2012-06-29T21:09:48.153 回答
1

毫无疑问,您需要一个队列来扩展,并且您可以监视此队列以产生“工人”。

Apache ActiveMQ非常健壮并且支持 REST 协议。Ruby 客户端也可用于访问队列。

关于使用 Apache ActiveMQ的 RESTful 队列的有趣文章

于 2012-04-18T11:25:04.820 回答
0

redis发布/订阅应该可以解决问题

http://redis.io/topics/pubsub

于 2012-04-17T06:09:56.463 回答