6

RabbitMQ 使用称为传递标签的非负长整数(63 位整数,因为只有非负数)来存储通过通道发送了多少消息。如果您通过频道发送 (2^63)+1 消息会发生什么?

4

1 回答 1

14

根据我的计算,假设最大发布速率为每秒 53,710 条消息,那么您总共必须发布 7.06 x 10^13 年,这比已知的宇宙。

换一种说法,如果我们假设以某种方式可以在每个处理器周期发布 3 条消息,并且英特尔处理器每秒可以处理 7,000,000,000 条消息,那么仍然需要将近 84 年。

因此,可以肯定地得出结论,您将首先遇到其他问题。但是,如果您的 RabbitMQ 服务器设法保持并运行那么长时间,那么您应该得到奖励。

但严肃地说,如果这以某种方式发生,我想这取决于 Erlang 如何处理整数。这篇文章 表明 Erlang 将耗尽内存 - 我不完全理解他们是如何做到这一点的,但也许整个系统会爆炸?谁知道。在 C# 中,整数只是在overflow之后滚动。

于 2013-10-26T15:03:30.880 回答