是否有必要使用尽可能少的队列和Web消息传递的解决方案

时间:2011-08-12 05:52:09

标签: ruby-on-rails messaging rabbitmq amqp

我在论坛中读到,在使用AMQP实现任何应用程序时,必须使用更少的队列。那么,如果我克隆twitter,我会为每个注册的用户提供一个独特且持久的队列,这是完全错误的吗?它似乎是最自然的方法,如果不为每个用户分配一个唯一的队列,那么如何设计这样的东西。

Web消息传递最常用的方法是什么。我看到RabbitHUb和Rabbit WebHooks,但Webhooks似乎不是一个可扩展的解决方案。我正在使用Rails和我的AMQP服务器作为守护进程运行。

2 个答案:

答案 0 :(得分:6)

在RabbitMQ中,队列非常便宜。它们是有效的轻量级Erlang进程,您可以在单个商用计算机(即我的笔记本电脑)上运行数十到数十万个队列。当然,每个都会消耗一些RAM,但是未使用的最近队列将 hibernate ,因此它们将消耗尽可能少的内存。此外,如果Rabbit内存中的消息内存不足,它会将旧消息分页到磁盘。

以上仅适用于单台机器。 RabbitMQ支持lightweight clustering的形式。当您将多个Rabbit节点加入群集时,每个节点都可以看到其他节点上的队列和交换,但每个节点只运行自己的队列。所以,你将能够拥有更多的队列! (到Erlang集群的极限,通常是几百个节点)因此,集群形成分布在多台机器上的逻辑代理;客户端连接到它并通过任何节点透明地使用它。

也就是说,为每个用户设置一个持久队列似乎有点奇怪:在AMQP中,当他们在队列中时你无法浏览消息;您可能只获取/使用将其从队列中取出的消息,并将发布添加到队列末尾。因此,您可以将AMQP用作消息路由器,但不能将其用作某种消息数据库。

答案 1 :(得分:0)