HeartbeatReadTimerCallback中的随机NullReferenceExceptions

时间:2017-12-12 10:36:13

标签: c# rabbitmq masstransit

我们将MassTransit与RabbitMQ结合使用。以下dll版本正在我们的控制台应用程序中使用:

  • MassTransit
    • 运行时版本v4.0.30319 - 版本 3.4.0.0
  • MassTransit.RabbitMqTransport
    • 运行时版本v4.0.30319 - 版本 3.4.0.0
  • RabbitMQ.Client
    • 运行时版本v4.0.30319 - 版本 4.0.0.0
  • NEWID
  • ...

即使发布方法包含在try/catch中,有时发布会导致崩溃。我不得不说我们连续发表了2000多篇文章。

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at RabbitMQ.Client.Framing.Impl.Connection.HeartbeatReadTimerCallback(Object state)
   at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.TimerQueueTimer.CallCallback()
   at System.Threading.TimerQueueTimer.Fire()
   at System.Threading.TimerQueue.FireNextTimers()
   at System.Threading.TimerQueue.AppDomainTimerCallback()

导致NullReference的Publish是:

    ...
    IBusControl BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
    {
        busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
        {
            hostConfig.Username(Username);
            hostConfig.Password(Password);
        });
    });
    ...
    //I suppose the crash occurs after the code below is executed
    TaskUtil.Await(() => BusControl.Publish(message));

我知道this问题,但即使关闭,我也没有看到任何明确的解决方案......

我想问一下,如果更新dll是解决方案,我们必须更新哪个版本,我们是否只需更新MassTransit dll(参见上面的列表)或RabbitMQ服务器?我感谢任何帮助。

编辑这是我们的生产环境中出现的问题。所以不幸的是我不可能调试......

编辑在Gitter.im上得到了某人的答案

  

我建议你将MT更新到最新版本。它使用了   4.1.3 rabbitmq的版本。这个应该包含修复。如果您的问题与您刚发布的rabbitmq问题有关。在   其他情况我无法帮助你。我的意思是最新版本   https://www.nuget.org/packages/MassTransit.RabbitMQ/3.5.7

0 个答案:

没有答案