ruby-on-rails - 是否有必要使用尽可能少的队列和网络消息的解决方案

标签 ruby-on-rails messaging rabbitmq amqp

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

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

最佳答案

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

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

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

关于ruby-on-rails - 是否有必要使用尽可能少的队列和网络消息的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7036091/

相关文章:

ruby-on-rails - 在 Rails 中正确存储 "enumeration"模型

java - 生产者无法将消息分发给多个消费者?

Spring /RabbitMQ : transaction management

apache-kafka - 使用 spring-kafka 保证消息顺序的指数退避

c++ - 消息总线的最佳容器

java - pythonrabbitmqadmin listqueues命令虽然存在消息但无法获取消息内容

java - 如何使用spring boot在rabbit mq中创建动态队列?

javascript - 使用 AJAX 从 Ruby on Rails 服务器获取 JSON 内容

ruby-on-rails - 在 Sinatra 中使用 ActionMailer,使用邮件方法接收 nil 对象

ruby-on-rails - 如何在不获取 ActionController::RoutingError 的情况下删除 Rails 中未使用的 css?