当我将使用 nservice 的站点部署到新的生产环境时,速度慢得无法使用......
经过一些调试,我发现 mqsvc.exe 占用了 50% 的 CPU 使用率,另外 50% 被 w3wp.exe 占用了
我在这里找到了这篇文章: http://geekswithblogs.net/michaelstephenson/archive/2010/05/07/139717.aspx
推荐以下内容:
确保将 NserviceBus Generic Host 的 Windows 服务设置为正确的凭据
确保您为队列设置了正确的权限
确保在 NServiceBus 中打开正确的日志记录配置
所以我认为问题与权限有关,但即使在尝试正确设置权限(我认为)之后,我仍然无法解决问题。
如果您允许 NServiceBus 创建自己的队列,那么它将使用所需的正确权限来创建它们。
当您设置 Web 应用程序,然后创建队列,然后应用程序运行的身份发生变化时,就会出现问题。那么你就会遇到这个问题。 NServiceBus 尝试检查队列中是否有消息,但它无权执行此操作,因此它会立即一遍又一遍地重试,从而使处理器达到峰值。
修复:删除队列。重新启动网络应用程序。 NServiceBus 接管。
编辑: 正如评论中所述,NServiceBus 3.x 默认情况下不会调用安装程序,这意味着除非您要求,否则不会在生产中自动创建队列。有关更多详细信息,请参阅安装程序上的文档页面。
对于 Web 应用程序(或不使用 NServiceBus.Host 的任何其他情况),您可以调用安装程序作为流畅配置的一部分。 NServiceBus 下载中有一个完整的示例,但这里有一个 GitHub 上相关文件的链接。
问题最终确实是网站需要被授予对队列的显式权限。
我在网上找到了许多资源告诉我这一点,但我仍然需要花费大量时间来弄清楚到底哪个帐户需要访问权限......事实证明,由于我的应用程序池设置为作为 ApplicationPoolIdentity 运行,我需要通过将以下帐户添加到 NServiceBus 队列来授予帐户权限:
IIS AppPool\{APP POOL NAME}
我授予了完全访问权限,但我相信如果您需要的话,您可以对其进行一些改进。