我希望每个消费者都能听到他们自己的私人队列。为此,我使用Elixir为每个用户生成一个进程,并订阅该进程以侦听其私有用户队列中的新消息。
在我的带有16G RAM的macbook pro上,我的rabbitmq管理面板向我显示我有:
文件描述符:256个可用 套接字描述符:138个可用
显然我无法打开超过138个连接。
问题1:基于此限制的是什么,我能够提出它吗?我想知道在生产机器上可能会有多高(需要什么样的EC2实例),以及每个用户建立连接是否是个好主意。我已经读过限制可能与ulimit有关,但是当我在命令行上运行ulimit时,我看到“无限制”。
我现在需要为4000名用户提供服务,每年可能会增加500-1000名用户。
另一种方法是从Elixir应用程序到Rabbitmq进行1 tcp连接,并为每个进程使用通道。这可行,但它需要稍微复杂的设置。他们需要重新使用现有连接并在其上打开一个新频道,而不是每个进程初始化自己的连接。
如果连接中断,我需要提出重新启动公共连接的策略,然后级联以重新启动每个进程的通道。我还没弄明白该怎么做。
Q2:渠道是更好的主意吗?将所有通道放入一个连接似乎是另一个极端。如果消息的带宽全部在同一连接上复用,那么它们的带宽会受到影响吗?
可能有哪些其他策略?
答案 0 :(得分:1)
渠道是更好的主意吗?
是
每个应用程序实例应该只有一个打开的连接,并且在其中广泛使用通道。
打开和维护TCP / IP连接速度慢且费用昂贵。
频道非常快,开放便宜,可以根据需要工作和关闭。