How do I create a long lived object in within the IIS/ASP.Ne



我目前正在和ASP中使用SignalR。Net MVC 4应用。我正在使用来自RabbitMQ的消息,本质上,每当有新消息进入队列时,我都需要通过SignalR进行广播。问题是在正常使用情况下,IIS中没有一个可以容纳长期使用的对象的地方。我每秒收到大约1000条消息,因此通过从外部队列监控服务/应用程序发出请求将消息推入IIS的标准方法几乎会扼杀我的IIS。

我对在后台线程上创建一个单例实例有一个大致的想法。不确定在iis中实现这一点的最佳方法是什么,如果应用程序失效,则希望自动重新创建单例。

您是否认为后台线程中会有一些东西每隔一段时间就会检查一次消息?

我过去曾使用quartz.net创建计划作业。它们的设置相当简单。你基本上可以说,从y时间开始,每x个间隔执行一次这个作业。无论采用何种解决方案,都可能需要添加错误处理。我认为你的石英工作会一直尝试执行每个x间隔,即使它抛出了一个异常,但你需要确保你首先清除了导致异常的原因。否则,它每次运行都会失败。例如,如果你的消息有问题,每次你尝试广播时都会出错。

注意应用程序的IdleTimeout。如果IIS让你的web应用程序进入睡眠状态,那么你的后台工作人员/石英工作也会进入睡眠状态。如果将IdleTimeout设置为0,则应用程序将永远不会休眠。

如果您在Global.asax.cs Application_Start()中初始化您的作业/工作者,则您的作业将始终在web应用程序启动时启动。

当你第一次部署应用程序、更新应用程序或重新启动应用程序时,你需要确保你的应用程序正在运行。不确定IIS中是否有此设置。但通常情况下,你的应用程序在收到请求后才会启动。祝你好运。如果你能找到解决方案,请告诉我。

如果你的应用程序因其他原因崩溃,也是一样的。你需要一些东西来重新启动你的网络应用程序。

希望能有所帮助!

相关内容

最新更新