我们有一个CSV上传器,用户可以上传填写了地址,城市,州,邮政编码的CSV文件。 CSV文件可以是数百,数千甚至数十万行。
我们需要对行进行地理编码;没问题,我们正在使用谷歌地图RESTFul Web服务,但我不想让用户等待我们对每一行进行地理编码(可能需要一些时间)。基本上,我希望上传完成,然后神奇地将地理编码作业传递给服务器,并允许用户继续导航Web应用程序,而地理编码在后台发生。
我认为,这个系统需要基于队列或作业的软件;也许ZeroMQ或RabbitMQ?我没有这方面的经验,所以喂养婴儿会很棒。我们正在使用ASP.NET C#。
答案 0 :(得分:3)
你使用排队的想法是合理的。如果您正在为Windows机箱开发,带有MSMQ端点的WCF是第三方排队技术的替代方案。
答案 1 :(得分:2)
这应该可以通过旋转一个新的线程来实现,在该线程上传递地理编码工作,然后正常地将页面响应返回给用户。 This question covers much the same problem.
您可以尝试以下方式:
ThreadPool.QueueUserWorkItem(delegate {
DoGeocoding(state details);
});
之后您可能需要或不需要调用Response.Flush来返回当前页面请求,并允许用户继续浏览。
答案 2 :(得分:1)
消息队列软件的替代方法是使用数据库来跟踪CSV处理请求。
您的CSV处理代码可以在每个请求的状态发生变化时更新表格。
您的ASP.NET站点可以查询该表以显示每个请求对用户的状态。