当前位置: 首页 > 知识库问答 >
问题:

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

艾俊晖
2023-03-14

我们需要允许用户以各种格式生成搜索结果导出。问题是导出的大小可能不同,需要几秒钟到几分钟才能完成。我希望允许用户在请求运行时触发请求并继续执行其他操作,但我不希望在必要时使用后台线程来降低web应用程序服务器的性能。

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

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

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

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

我很好奇是否有我可以忽略的其他选择,我应该考虑的问题,或者这是否是一个可靠的解耦解决方案,在过去对其他人有效。

共有1个答案

夔桐
2023-03-14

根据您的情况,我会使用会话beans。

或者JMX是为工作而设置的,但它们都是传统方式。我不喜欢jmx。

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

嗯,有石英工作设置,很容易设置,你可以从你的应用程序中触发它,如果你想要一些清理,你可以创建多个工作和智能,你可以使它们依赖。您可以参考这里进行石英设置。

 类似资料:
  • 我有一个简单的Spring-Boot应用程序,它只使用AMQP依赖项(仅-例如,没有web依赖项,所以JAR中没有包含应用服务器)。 我只想让应用程序运行并监听队列,并在收到消息时将一些信息记录到DB中--然而,由于没有应用程序服务器,它一启动就会再次关闭(因为什么都没有做)。在监听消息的同时,是否有一种最好的方法来保持应用程序的运行? 代码中没有什么令人惊讶的地方,只是标准的应用程序配置,然后还

  • 我在JAVA平台中使用Netbean IDE 8.0做了一个Web应用程序。该项目由JSP、Servlet和普通的. java文件组成。我想将项目作为一个简单的jar文件部署到客户端,以便他们可以执行jar文件并使用应用程序。我正在尝试使用具有给定资源的Netbean生成jar文件,但没有合适的资源。当我尝试提供的来源之一时,会创建一个war文件而不是jar文件。 所以,请帮助我将web应用程序转

  • 我正在尝试将Microsoft Team BOT作为Azure Web应用程序运行-可以在此处找到完整的代码 application.py: 在本地运行时,我可以将端口设置为8000,例如,将ngrok指向localhost,并在我的bot通道注册中指定url,一切正常。我一直在努力让我的代码在Azure中工作,但我就是无法做到这一点。我已将脚本配置为在端口8000上运行,并在应用程序设置中设置参

  • 主要内容:1- 创建Gradle工程,2- 配置Gradle,3-编辑应用程序结构,项目代码,5- Gradle构建,6-配置以运行应用程序1- 创建Gradle工程 打开 Eclipse ,在菜单中找到 File -> New -> Other…,在打开界面中选择 ,如下图中所示 - 点击下一步(Next),如下图中所示,并继续点击下一步(Next) - 在新打开的界面中输入项目代码的名称,这里我们创建一个名称为 如下图所示- 在新打开界面中,选择 的安装目录,如下图中所示,并继续点击下一步(

  • 目前,我正在尝试使用和来运行Spring Boot应用程序,在默认情况下作为web应用程序运行,在需要时作为独立的命令行应用程序运行(通过某种命令行参数)。我正在努力弄清楚当提供程序参数时,如何单独将其作为控制台应用程序运行。请给出任何建议。 主类-SpringApplication CommandLineRunner