首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitMQ:如何实现可伸缩的一对一通信?

RabbitMQ:如何实现可伸缩的一对一通信?
EN

Software Engineering用户
提问于 2018-10-16 14:18:11
回答 1查看 1.1K关注 0票数 1

我试图使用RabbitMQ进行客户端和服务器之间的双向一对一通信。因此,客户端1应该只能与服务器1通信,反之亦然:

服务器始终与RabbitMQ连接,而客户端则按需启动和关闭。这是因为服务器应该接收来自其客户端的所有消息,但是如果服务器在客户端不存在时向其客户端发送消息,则如果该消息刚刚丢失就可以了。

此外,对于系统的每个用户,必须有一个客户机-服务器对.

实现这一点的第一个想法是为每个客户机-服务器对创建一个新的RabbitMQ用户和vhost,并在每个vhost中创建两个队列(一个由服务器使用,一个由客户机使用)。

但是,这是可伸缩的吗?例如,如果系统有10k用户,就会有10k RabbitMQ用户、10k vhost和10k永久队列、连接、通道和使用者(来自服务器)。

这些大量的队列和连接会不会成为RabbitMQ的一个性能问题?

用RabbitMQ实现这种行为的最佳方法是什么?还是与AMQP和RabbitMQ不同的技术更适合这个用例?

EN

回答 1

Software Engineering用户

发布于 2018-10-16 16:02:42

首先,使用单独的vhost是一个很好的主意(至少我记得是正确的),基本上是免费的。

每个队列、交换等等都是一个Erlang进程。这些加起来(慢慢)。自从我最后一次与RabbitMQ合作已经有好几年了,但是有100‘s的Erlang过程应该是可行的。

最终,中间的单个盒子将被超载。对RabbitMQ实例进行集群可能会有所帮助,但这取决于镜像队列将提高对节点故障的恢复能力,而不会增加容量。

在容量方面,可能更有帮助的可能是客户机/服务器对的一致散列,这些散列将它们放置在特定的RabbitMQ实例上。这将为所有客户机/服务器对删除中间的单个框。即使您只从单个实例开始,使用一致的散列查找RabbitMQ意味着您可以轻松地在中间添加更多实例。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/380117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档