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

Sid*_*Sid 3 messaging ruby-on-rails amqp rabbitmq

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

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

scv*_*lex 6

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

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

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