Long-运行 有进度通知的后台任务
Long-running background tasks with progress notifications
我有一个 ASP.NET 网站,其中包含许多 运行(5 分钟到 2 小时)用户启动的任务。我希望每个用户都能够看到自己的工作进度,并能够在稍后关闭浏览器和 return。
当前计划是在每个作业启动时将其存储在数据库中,并将消息发布到 RabbitMQ 队列,windows 服务将接收并开始处理该作业。
但是,我不确定将进度信息从服务传回网络服务器的最佳方式是什么?我看到两个选项:
- 将进度信息存储在数据库中,并对其进行网络应用轮询
- 在网络服务器中有一个 RabbitMQ 消费者,并有 windows 服务 post 向该队列发送消息
我倾向于第二种选择,因为我真的不想通过定期轮询/写入进度信息来增加数据库的开销。但是,关于使用 RabbitMQ(作为消费者)有 lots of warnings - 因为我没有发送重要消息(如果未处理进度消息并不重要),我想知道这是否重要?并不是 (著名的遗言)每当重新启动 Web 应用程序时都很难重新启动 RabbitMQ 消费者。
这个选项听起来合理吗?还有更好的选择吗?
- Store the progress information in the database, and have the web-app poll for it
- Have a RabbitMQ consumer in the webserver and have the windows service post progress messages to that queue
正确答案是C) 以上皆是!
数据库不是应用程序的集成层。
RabbitMQ 不适用于最终用户消息消费。
但是,当您将 RabbitMQ 与数据库结合使用时,您会得到美妙的东西...
让您的后台服务通过 RabbitMQ 发送进度更新。 Web 服务器将侦听这些更新并将新状态写入数据库。使用 websockets (signalr) 立即将进度更新推送给用户,但您仍然在数据库中拥有当前状态,以防用户完全刷新页面或稍后返回。
的博客 post 中写了有关此基本设置的内容
我有一个 ASP.NET 网站,其中包含许多 运行(5 分钟到 2 小时)用户启动的任务。我希望每个用户都能够看到自己的工作进度,并能够在稍后关闭浏览器和 return。
当前计划是在每个作业启动时将其存储在数据库中,并将消息发布到 RabbitMQ 队列,windows 服务将接收并开始处理该作业。
但是,我不确定将进度信息从服务传回网络服务器的最佳方式是什么?我看到两个选项:
- 将进度信息存储在数据库中,并对其进行网络应用轮询
- 在网络服务器中有一个 RabbitMQ 消费者,并有 windows 服务 post 向该队列发送消息
我倾向于第二种选择,因为我真的不想通过定期轮询/写入进度信息来增加数据库的开销。但是,关于使用 RabbitMQ(作为消费者)有 lots of warnings - 因为我没有发送重要消息(如果未处理进度消息并不重要),我想知道这是否重要?并不是 (著名的遗言)每当重新启动 Web 应用程序时都很难重新启动 RabbitMQ 消费者。
这个选项听起来合理吗?还有更好的选择吗?
- Store the progress information in the database, and have the web-app poll for it
- Have a RabbitMQ consumer in the webserver and have the windows service post progress messages to that queue
正确答案是C) 以上皆是!
数据库不是应用程序的集成层。
RabbitMQ 不适用于最终用户消息消费。
但是,当您将 RabbitMQ 与数据库结合使用时,您会得到美妙的东西...
让您的后台服务通过 RabbitMQ 发送进度更新。 Web 服务器将侦听这些更新并将新状态写入数据库。使用 websockets (signalr) 立即将进度更新推送给用户,但您仍然在数据库中拥有当前状态,以防用户完全刷新页面或稍后返回。
的博客 post 中写了有关此基本设置的内容