【发布时间】:2018-07-16 20:59:38
【问题描述】:
背景: 我们的应用程序是一个基于.NET 的多线程应用程序。每个线程将连接到同一个交换并对应于不同的队列。每个线程都使用自己的长期连接,一切都很顺利,直到有一天我们在所有线程上都出现超时异常,我们的应用程序崩溃了。我认为这是一个服务器端问题,很少有网站提到它可能是由于垃圾收集或内存限制。 解决方案:RabbitmQ 建议使用 NetworkRecoveryInterval 选项来解决超时问题。
我需要帮助来模拟这种情况并确保修复有效。
提前谢谢你。
【问题讨论】:
-
您说:“我认为它是服务器端问题,很少有网站提到它可能是由于垃圾收集或内存限制。”你为什么会这样假设?你有证据支持这种说法吗?您没有提及重要信息,例如您使用的是什么版本的 RabbitMQ 和 Erlang,或者您是否在 RabbitMQ 日志中发现了任何有趣的内容。
-
@LukeBakken 不幸的是,我们没有服务器日志,我们只有应用程序日志,它为我们提供了以下信息: RabbitMQ-EXCEPTION 处理工作线程消息:System.TimeoutException:操作已超时。在 RabbitMQ.Util.BlockingCell.GetValue(TimeSpan timeout) 在 RabbitMQ.Client.Impl.SimpleBlockingRpcContinuation.GetReply(TimeSpan timeout) 在 RabbitMQ.Client.Impl.ModelBase.BasicGet(String queue, Boolean autoAck) 版本是:RabbitMQ 3.6。 12、二郎19.3.2
-
默认情况下,每个操作都有超时,我相信。在代码中搜索
ContinuationTimeout- 你应该可以扩展它。我认为BasicGet可以在队列中没有消息消费的情况下超时。 -
@LukeBakken 我尝试在队列中没有消息的情况下进行模拟,但没有成功,