我正在尝试使用rabbitmq建立一个社交网络,但我对队列感到困惑。 我有两种方法: 1:对消息进行排队并根据属性进行分发 2:为每个用户创建一个队列,因为它们在线
但这两种方法都存在很多问题。
我无法使用我的应用程序缩放它们。我可能会淹没rabbitMQ队列..
是否存在具有大量用户的通用标准流程?
欢迎使用任何语言的任何代码示例..
答案 0 :(得分:3)
一般情况下,我不建议每个用户使用一个队列。我认为,管理100个或数千个动态创建的队列将非常笨拙。
我不清楚RabbitMQ
在您计划的架构中的位置。您是否计划拥有支持数据存储,例如Postgres
,NoSQL
的味道或某种图形数据库(即Neo4j
)? RabbitMQ通常不会像社交网络这样的东西,而是在不同技术之间transport mechanism
,ETL mechanism
或者其他类似的东西,但在你的帖子中听起来似乎也许它意味着成为核心。
即使您要使用每个用户一个队列,您仍然需要使用这些队列中的消息并将某些形式的数据放在某处,例如Postgres
。
在可扩展性方面,泛滥RabbitMQ服务器并不容易。它可以同时处理队列中的数百万条消息(或更多) - AMQP在银行和金融行业中大量使用以处理非常高的消息量 - 如果它正在获得,它将进入flow control
模式有点不知所措。这是AMQP clients
的一个信号,他们应该避免向队列发布其他消息。在这种情况下,发布商可以暂停,直到取消flow control
模式,然后继续。
您可以根据其他一些标准划分队列。也许只是一个特定的用户子集。用户可以成为routing key
的一部分。这样你就不需要每个队列都有一个单独的队列,但仍然可以根据用户进行路由。
您可能希望路由邮件的方式更多地取决于您计划使用RabbitMQ
进行的操作。这将决定routing key
中您想要的各种项目,以及您希望在消息payload
中提供的内容。