我有一个小应用程序消耗来自RabbitMQ的消息。
目前它处于while(1)循环中,它调用" Dequeue"并在那里永远等待消息,然后处理消息。
所以我想的是阻塞电话" Dequeue"一个好主意或立即DequeueNoWait(没有立即返回)不会更好,甚至可能是" Dequeue"超时。迭代时当然会有更多。
谢谢
答案 0 :(得分:0)
这是一个经典问题。您可以做的最好是使用阻塞Dequeue()
超时,以便不仅可以处理RabbitMQ消息。例如:
应根据您的期望设置超时。对于某些系统信号,在将过程从水中喷出之前给出非常严格的超时。对于控制台应用程序,人类用户不会注意到150毫秒的超时,它仍然会看起来接近实时。
如果你没有阻止并且不使用超时,CPU将消耗不必要的资源以尽可能快地循环,没有任何好处。只有当时间非常重要时才会建议这样的事情。但是你也不会使用RabbitMQ。
编辑:有关超时的更多信息
1秒超时不表示在1秒内接收到一条消息。消息在到达时仍会立即处理。超时意味着 OTHER 任务执行时间最多为1秒(平均延迟是超时的一半,因此0.5秒)。