我有一个持久队列,用于保存持久消息。消息以每秒大约 10 条消息的速度到达队列。
客户端无法以该速率获取这些消息。结果,服务器上的队列不断增长。
每条消息都小于 1 KB,并且服务器和我的计算机之间有一条正常的 2 Mbps 线路。使用网络监控实用程序,我发现它几乎没有使用任何带宽。
到目前为止,客户端对消息没有执行任何操作,只是将它们打印到控制台,因此客户端上的处理时间几乎为 0。
其他一些细节: 我正在使用java客户端。 我已将客户端设置为预取 10000 条消息。 (也尝试使用默认值) 往返时间约为 350 ms。 消息是单独确认的。
可用资源未得到充分利用,在我看来,每秒 10 条消息几乎算不上什么负载。如何加快处理速度,以便将队列中保留的消息更快地传输到客户端。可能使用某种批处理。
最佳答案
如果您每 350 毫秒单独确认一次消息,我预计消费者每秒可能会收到大约 1/0.35 或大约 2.9 条消息。但是,该协议(protocol)可能不是那么高效,并且可能需要两次往返服务器才能确认消息并获取下一条消息。即每秒 1.4 条消息可能更现实。
350 毫秒的往返时间非常高,您可以在这段时间内环游世界并再次返回,因此简单的解决方案可能并不最适合您。例如伦敦 -> 纽约 -> 东京 -> 伦敦。
我会尝试在您的客户本地找一个经纪人。这样,往返就在您的客户和本地经纪人之间进行。
关于java - 兔子MQ : Improve queue flushing speed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15679461/