【问题标题】:NServiceBus - Long running handler prevents queue from processing any other messagesNServiceBus - 长时间运行的处理程序阻止队列处理任何其他消息
【发布时间】:2016-03-30 19:52:53
【问题描述】:

我正在运行 NSB 5,我正在使用 NHibernate Persistence 并将 MaximumConcurrencyLevel 设置为 10。 我有一个调用执行 SSIS 包的存储过程的处理程序。这个包需要很长时间才能运行。我开始注意到,每当处理此特定消息类型时,所有其他消息处理都会停止。我通过 SQL Profiler 注意到 NSB 在后台对队列表的持续查询停止了,即使 NSB 只处理一条消息,也不会处理任何放入队列的额外消息。

在处理因数据库命令需要很长时间才能完成而阻塞队列的处理程序时,是否有任何准则或已知问题?

【问题讨论】:

  • 你解决了这个问题吗?

标签: nhibernate ssis nservicebus


【解决方案1】:

听上去好像有10个线程很忙,所以端点被阻塞了,你能测试一下吗?

我建议将此消息处理程序托管在它自己的进程中

有意义吗?

【讨论】:

  • 我可以通过清除队列、将此消息类型添加到队列中来重现该问题,然后在处理该消息时将其他消息添加到队列中。在第一个消息完成之前,不会处理其他消息。为一个特定的处理程序创建另一个服务、端点和队列是最后的选择。
  • 你是在调试中做这个吗? NServiceBus 在调试模式下一次只处理一条消息,你可以在发布版本中尝试吗?
  • 即使在发布版本中,一旦遇到特定的消息处理程序,它也会停止处理来自队列的消息。我还在使用有效的许可证,以防仍会限制吞吐量。
  • 您有机会在 github 或 Dropbox 上分享您的代码吗?您可以通过电子邮件将代码链接直接发送给我 sean.farmar at specific.net
  • 您可以尝试从命令行(而不是从 Visual Studio)运行主机进程,看看您是否仍然看到相同的行为? NServiceBus.Host.exe /NServiceBus.Production
猜你喜欢
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多