使用JMS为web应用程序创建长时间运行的文件



我们需要允许用户生成各种格式的搜索结果导出。问题是导出的大小可以变化,并且需要几秒钟到几分钟才能完成。我希望允许用户能够触发请求并在它运行时继续做其他事情,但我不想在必要时使用后台线程来损害web应用服务器的性能。

我最初的想法是将web应用程序和生成过程解耦。我可以使用JMS和消息驱动bean (MDB)来处理与web应用程序分开部署的文件生成;允许根据未来的需要单独扩展它们。

从技术上讲,我看到web应用程序维护了一个它已经启动并发送JMS消息的请求列表。MDB完成后,它将更新发送回web应用程序侦听的队列,并使用状态和文件URI信息相应地更新请求列表。当用户想要下载他们所请求的生成文件时,该文件将流式传输到浏览器,然后删除。

作为一个额外的预防措施,MDB还将触发一个延迟消息到一个清理队列,在延迟过期后,MDB检查生成文件的URI,如果它继续存在,删除该文件并通知web应用程序,以便它可以通过删除它或将其标记为已自动删除来更新它的内部列表。

这里的美妙之处在于,如果我需要增加并发导出作业的数量,我可以轻松地生成另一个JMS客户端进程或调整现有进程以运行更多并发MDB处理程序,而无需触及web应用程序本身。

我很好奇是否还有其他我可以忽略的替代方案,我应该考虑的问题,或者这是否是一个坚实的解耦解决方案,在过去为其他人工作。

根据您的场景,我将使用会话bean。

或者为作业设置了JMX,但它们是遗留方式。我不喜欢jmx。

但只是让你知道,如果这些是有限的报告,需要每天一次的那种,和简单的形式是使用石英作业,但我认为你不能运行,如果你可以多个作业在同一时间。

有石英作业设置很容易设置,你可以从你的应用程序触发它,如果你想要一些清理,你可以创建多个作业和智能,你可以使它们相互依赖。

最新更新