Networking 我想使用rabbitmq构建一个社交网络,但我看不到用户队列

Networking 我想使用rabbitmq构建一个社交网络,但我看不到用户队列,networking,rabbitmq,social,spring-social,Networking,Rabbitmq,Social,Spring Social,我试图使用rabbitmq构建一个社交网络,但我对队列感到困惑。 我有两种方法: 1:对消息进行排队并根据属性进行分发 2:每个用户在线时创建一个队列 但这两种方法都存在很多问题 我无法使它们与我的应用程序一起扩展。我可能会淹没rabbitMQ队列 是否有一个具有大量用户的通用标准流程 欢迎使用任何代码示例。。。在任何语言中..一般来说,我不建议每个用户使用一个队列。我认为,管理100个或数千个动态创建的队列会非常麻烦 不过,我不清楚RabbitMQ在您计划的体系结构中的位置。您是否计划拥有一个

我试图使用rabbitmq构建一个社交网络,但我对队列感到困惑。 我有两种方法: 1:对消息进行排队并根据属性进行分发 2:每个用户在线时创建一个队列

但这两种方法都存在很多问题

我无法使它们与我的应用程序一起扩展。我可能会淹没rabbitMQ队列

是否有一个具有大量用户的通用标准流程


欢迎使用任何代码示例。。。在任何语言中..

一般来说,我不建议每个用户使用一个队列。我认为,管理100个或数千个动态创建的队列会非常麻烦

不过,我不清楚
RabbitMQ
在您计划的体系结构中的位置。您是否计划拥有一个支持数据存储,例如
Postgres
、一种
NoSQL
或某种类型的图形数据库(即
Neo4j
)?RabbitMQ通常不会成为社交网络的核心,而是不同技术之间的
传输机制、
ETL机制或类似的东西,但在你的文章中,它听起来可能是核心

即使每个用户使用一个队列,您仍然需要使用这些队列中的消息,并将某种形式的数据放在某个地方,例如在
Postgres

就可伸缩性而言,大量使用RabbitMQ服务器并不容易。它可以一次(或多次)处理队列中的数百万条消息——AMQP在银行业和金融业中大量用于处理非常大的消息量——如果有点不知所措,它将进入
流控制模式。这是向
AMQP客户端发出的一个信号,表明它们应避免向队列发布其他消息。在这种情况下,发布者可以暂停,直到解除
流控制
模式,然后继续

您可以根据其他一些标准划分队列。也许只是一个特定的用户子集。用户可以是
路由键的一部分。这样,您就不需要为每个队列设置单独的队列,但仍然可以根据用户进行路由


不过,您可能希望如何路由消息更多地取决于您计划如何使用
RabbitMQ
。这将决定您希望在
路由密钥
中使用的项目的种类,以及您希望在消息
有效负载

中使用的内容。您可以更具体地回答以下问题:您正试图使用AMQP broker解决什么任务?您确定您的项目确实需要RabbitMQ吗?如果你想在用户之间实现消息传递,这个问题已经解决了,这里有相关的答案-。正如@zaq178miami所说,我认为这不是开发你的架构的更好方法。用户不应该直接访问RMQ,您应该控制队列号。由于连接太多,您可能会失去队列控制。有时,amqp消息与聊天消息混淆。我希望它能有用。我在想这个答案:@mario我觉得这个答案很普通。例如,Twitter不使用RabbitMQ。大型社交网络的架构非常复杂。阅读这篇文章:我肯定他们使用了一些队列系统,但我认为这是不够的。无论如何,我可以从你的想法开始,以后再改变:)!是的,我喜欢你的回答,因为你提到了所有的比特。特别是“…让RabbitMQ服务器泛滥并不容易…”。还有更多。您还提到了数据后端的使用,这是我的观点。如果我需要对数据库进行操作。。为什么不排队呢?假设它“完成”只是因为它在队列中?我知道“读取”可能会被延迟,但当MQ执行任务时,我会保存我的“状态”以进行处理。因此,除非聊天(但有rabbitMQ聊天;),否则我不需要知道您是否喜欢我的帖子“立即”,我可以延迟在DB中的写入,并在队列中发布进程。另一方面,这实际上是一个基本问题:我不确定数据库上的R/W是否比排队和后处理更快……对不起……再次。。鉴于上述情况,我想继续讨论这个问题。用户方法应该使用“在线”用户,这可能意味着有限的订户(现在只有在线用户)。。。但我们仍然可以假设一个很大的数字。另一种方法确实是基于一些内部数据,比如,帖子,评论,喜欢或类似的东西来排队。我不知道你在上面的评论中是什么意思。。。任何MQ都是一种传输机制,一种达到目的的手段——它必须去某个地方并被处理,最终在某个地方被持久化,无论是Postgres、MongoDB还是类似的东西。同样,如果你喜欢我的答案,你应该考虑接受它,或者至少要接受它。