Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止MSMQ时NServiceBus 100%CPU使用率_Nservicebus - Fatal编程技术网

停止MSMQ时NServiceBus 100%CPU使用率

停止MSMQ时NServiceBus 100%CPU使用率,nservicebus,Nservicebus,我们在web应用程序中使用NServiceBus,最近发现,尽管处于连接状态,但有时仍有一些消息处于出站队列中,但从未离开。删除它们的最快解决方案是重新启动MSMQ服务。我遇到的一个问题是,当重新启动或停止MSMQ服务时,CPU会跳到100% 有没有人遇到过这种情况,并找到了防止这种高负荷的方法。我不喜欢仅仅因为停止服务而导致停机的想法?我知道的一种方法是使用仅发送模式,但这并不理想 更新: global.asax应用程序启动中使用的配置代码: IBus bus = Configure

我们在web应用程序中使用NServiceBus,最近发现,尽管处于连接状态,但有时仍有一些消息处于出站队列中,但从未离开。删除它们的最快解决方案是重新启动MSMQ服务。我遇到的一个问题是,当重新启动或停止MSMQ服务时,CPU会跳到100%

有没有人遇到过这种情况,并找到了防止这种高负荷的方法。我不喜欢仅仅因为停止服务而导致停机的想法?我知道的一种方法是使用仅发送模式,但这并不理想

更新: global.asax应用程序启动中使用的配置代码:

  IBus bus = Configure
            .With()
            .DefaultBuilder()
            .FileShareDataBus("c:\\storage")
            .XmlSerializer()
            .MsmqTransport()
            .IsTransactional(false)
            .PurgeOnStartup(false)
            .UnicastBus()
            .ImpersonateSender(false)
            .CreateBus()
            .Start(() => Configure.Instance.ForInstallationOn<Windows>().Install());
IBus总线=配置
.与()
.DefaultBuilder()
.FileShareDataBus(“c:\\storage”)
.XmlSerializer()
.MsmqTransport()
.IsTransactional(错误)
.PurgeOnStartup(错误)
.UnicastBus()
.ImpersonateSender(错误)
.CreateBus()
.Start(()=>Configure.Instance.ForInstallationOn().Install());

我认为您的问题可能与GitHub上的问题有关,GitHub上的问题已经解决,但目标是尚未发布的4.0版本

问题是NServiceBus正在尝试从队列中读取,但没有队列!因此,它进入了一个紧密的检查错误重试循环,这将限制处理器

对于需要MSMQ的web服务器来说,关闭MSMQ是一件相当令人愤怒的事情。如果您需要在生产中执行此操作,我建议将服务器从负载平衡池中取出(我假设/希望您使用的是负载平衡器),然后重新启动MSMQ,然后重新启动IIS。如果服务器不处理请求,那么短时间的高CPU活动应该不是什么大问题


当4.0面世时,它应该会解决CPU问题,但我仍然建议停止服务器轮换,因为否则
Bus.Send()
将在MSMQ不可用时抛出。你使用的是什么版本的nsb?我使用的是nsb 3.3.0。我还更新了问题,添加了配置代码。谢谢。这不是权限问题,不幸的是,我在发布这篇文章前几周确实遇到了这个问题,我花了一段时间才解决这个问题。重启或停止MSMQ服务从来都不是我们的目标,但我们认为这是我们应该考虑的事情之一,而不是被掩盖起来。不过,很高兴看到有一些事情正在酝酿中。为此干杯!