RabbitMQ';s的送货标签溢出?

RabbitMQ';s的送货标签溢出?,rabbitmq,amqp,Rabbitmq,Amqp,RabbitMQ使用称为传递标记的非负长(63位整数,因为只有非负整数)来存储通过通道发送的消息数量。如果你通过一个频道发送(2^63)+1条消息,会发生什么情况?根据我的计算,假设a,你必须发布7.06 x 10^13年,这比已知宇宙的年龄大四个数量级 换一种说法,如果我们假设每个处理器周期可以发布3条消息,而英特尔处理器每秒可以处理700000000条消息,那么仍然需要将近84年的时间 因此,可以肯定的是,您将首先遇到其他问题。但是,如果您的RabbitMQ服务器能够保持并运行那么长的时间,

RabbitMQ使用称为传递标记的非负长(63位整数,因为只有非负整数)来存储通过通道发送的消息数量。如果你通过一个频道发送(2^63)+1条消息,会发生什么情况?

根据我的计算,假设a,你必须发布7.06 x 10^13年,这比已知宇宙的年龄大四个数量级

换一种说法,如果我们假设每个处理器周期可以发布3条消息,而英特尔处理器每秒可以处理700000000条消息,那么仍然需要将近84年的时间

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


但说真的,如果真的发生了这种情况,我想这取决于Erlang如何处理整数。表示Erlang将耗尽内存-我不完全理解他们是如何做到这一点的,但也许整个系统都会崩溃?谁知道呢。在c#中,INT只是在后面滚动。

是的,我知道它不太可能发送这么多消息。我很想知道如果你去的话会发生什么。虽然我们都能想象会发生什么,但我想看看是否有人已经知道或者可以给我提供参考。考虑到你对问题的定义,这不是“不可能”——不可能。但是,我确实在回答的第二部分尝试了理论化:)可能是可以设置一个测试,其中整数值被故意设置为(MaxValue-1)或其他值,尽管我认为这是一个学术练习(nextPublishSeqNo>0){unconfirmedSet.add(getNextPublishSeqNo());nextPublishSeqNo++;}带有负数long,因此它将永远不会将其添加到未确认集,也永远不会添加1以获取下一个,因此我认为您将获得相同的id并与之相关的问题。