2015-02-10 45 views
0

(我为标题感到抱歉,这是我能想到的最好的)如何管理多个用户的系统队列和启动/停止实例?

我有一个PlayFramework(2.3)应用程序,我的用户可以上传大的csv文件进行处理。 一旦CSV导入,我运行一个任务,将通过每个新的条目,并检查一个特定的数据与外部API(每个条目)的请求。

因为这需要很长的时间,我做的异步检查,但我在这里面临的一个结构性问题:

  1. 用户A上传文件100K线
  2. 我的100K行添加到我的异步代码,并启动它
  3. 用户B上传文件200K线
  4. 我想补充的新线目前异步代码
  5. 我停止应用程序(更新代码)
  6. 重新启动时,应该从停止位置开始。

我想到了一个Queue系统,但是我在启动应用时会失去兴趣。

有关我如何做到这一点的任何想法?

谢谢你的帮助。

回答

0

既然问题是结构性的,我只会专注于高层次的实现细节:

我停止应用程序(更新代码)

当你决定停止应用程序,你需要一种方法来逐渐停止所有正在运行的线程为此,您在应用程序中启动的每个线程都应该注册某种线程管理器。这样,当您通过单击停止按钮/关闭应用程序服务器来决定停止应用程序时,您的线程管理器会知道哪些线程正在运行,并将使这些线程有机会保存其状态或完成工作,而不允许任何新的线程在最终降低主线程本身之前产生。

重新启动时,它应该开始停止的地方

为了从停止的地方开始,你需要保存完成的工作状态的地方。假设您正在使用基于队列的系统,则必须在应用程序停止之前序列化您的队列。这样,当您重新启动应用程序时,您不会丢失队列中的内容。

+0

这听起来对我来说很合理。我第二个这个高层次的实现描述。 – hfontanez 2015-02-10 15:28:31

相关问题