【发布时间】:2015-10-27 09:09:24
【问题描述】:
我有一个 ASP.NET 网站,其中包含许多长时间运行(5 分钟到 2 小时)的用户启动任务。我希望每个用户都能看到自己工作的进度,并能够关闭他们的浏览器并在稍后返回。
当前计划是在每个作业启动时将其存储在数据库中,并将消息发布到 RabbitMQ 队列,Windows 服务将接收该队列并开始处理该作业。
但是,我不确定将进度信息从服务传回网络服务器的最佳方式?我看到两个选项:
- 将进度信息存储在数据库中,并让网络应用对其进行轮询
- 在 Web 服务器中有一个 RabbitMQ 消费者,并让 Windows 服务将进度消息发布到该队列
我倾向于第二个选项,因为我真的不想通过定期轮询/写入进度信息来增加数据库的开销。但是,有lots 和warnings 关于使用RabbitMQ(作为消费者) - 因为我没有发送重要消息(如果不处理进度消息并不重要),我想知道这是否重要?每当重新启动 Web 应用程序时,重新启动 RabbitMQ 消费者并不是(著名的遗言)。
这个选项听起来合理吗?还有更好的选择吗?
【问题讨论】:
标签: asp.net architecture windows-services rabbitmq long-running-processes