繁体   English   中英

在多线程环境中生成PDF

[英]Generating PDFs in multi-threaded environment

目标是提供pdf生成服务。 该服务可通过简单的servlet获得。

这样的假设是,该服务应该在多个负载平衡的服务器(例如Tomcat实例)上运行,并且每个服务器都运行其手动创建的线程,这些线程会生成PDF。 每个请求都必须写入数据库,并且它的pdf状态必须在整个过程中进行更新,例如:

  • 首先排队
  • pdf生成开始时正在进行中
  • 在创建pdf后进行处理

另一个假设是,每个收到请求的Tomcat实例都负责生成文档。 整个解决方案在重新启动后必须是持久的,因此每个服务器实例都需要以某种方式存储其任务队列(例如,在文件中?)。

有人可能会认为整个过程可能与数据库同步,但是IMHO轮询数据库以获取新的PDF请求可能很耗时。

有任何想法,提示吗?

假设是灵活的,因此,如果有人碰巧提供了一些很好的超越假设的解决方案,请您分享他/她的想法。

要进行排队,请使用带有持久队列的消息总线(例如RabbitMQ或ActiveMQ)。

  1. 提供一个请求servlet,该请求servlet将请求放入消息队列,并在数据库中为该请求设置QUEUED状态。
  2. 使用侦听器(是否在Tomcat Servlet容器中)侦听队列中的消息。
  3. 当侦听器检测到新消息时,他们将其拉出并开始生成PDF,并在消息上设置“进行中”状态。
  4. 侦听器完成处理后,他们将在作业上设置PROCESSED状态,对消息进行确认以将其从队列中完全删除,然后继续进行下一个处理。

如果侦听器在处理完消息之前死亡,则该消息将被取消确认,并可供其他侦听器处理。 另一个侦听器将接听它,并将状态再次设置为“进行中”,然后完成它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM