首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让服务等待带外流程的完成?

如何让服务等待带外流程的完成?
EN

Stack Overflow用户
提问于 2018-10-12 18:27:00
回答 1查看 32关注 0票数 0

我有一项服务,住在服务器1上。让我们称之为PDFServicePDFService获取文档并将它们拼接在一个PDF中。

但是,PDFService只知道文档ids。它依赖于Server 2来获取文档的实际内容。

PDFService的进程开始时,它将分批收集文档id。当它有一个批处理时,它将为批处理中的每个id发送一个异步请求到服务器2上的一个队列(取回204)。然后它将继续收集更多批并重复。

一旦所有批次都被收集并发送出去,PDFService将开始缝合过程。

同时,服务器2可能已处理了任何文档、部分文档或所有文档并返回到服务器1。服务器2可能以与其接收到的文档不同的顺序返回文档。(每个文档都需要不同的时间来编译和返回。)

服务器1必须按照发送的顺序缝制它们。因此,它必须等待文件1,缝制它,等待文件2,缝制它,等等。

到目前为止,我有一个DocumentManager类,它可以将所有文档in保存在带有null值的Map中。当完成的文档从服务器2返回时,Map将被更新为一个实际值(一个保存文档内容的对象)。这显然是错误的,因为那时PDFService必须使用while null + sleep,这很糟糕。

我的问题是:如果需要,我如何让PDFService“等待”每个文档?向PDFService Map添加CompletableFuture对象似乎很有希望,但我不知道如何使用它,或者这是否是正确的方法。

(这是我的第一个问题,请提供建设性的反馈!)

EN

回答 1

Stack Overflow用户

发布于 2018-10-12 19:38:25

嗯-嗯.我可以推荐您查看一些企业集成框架,如“”、"Apache“、"MuleSoft”等。这样的框架可以处理所有等待、异步、并行、聚合等事情,这对您来说要容易得多。

总体而言

它将为批处理中的每个id发送一个异步请求到服务器2上的队列

您已经提到了一个队列,因此使用JMS队列是可能的解决方案之一。

  • Server1将documentId for Server2发送到JMS队列中
  • Server2侦听队列并使用实际的文档进行响应(服务器可以在JMS上响应的可能性有很多)
  • Server1监听响应,然后在收到所有响应时缝合所有响应。

但是使用EIP框架,JMS不仅仅是一种可能--例如,对于批处理来说,它可以是同步的,但是可以并行地调用Server2.

顺便说一句:在没有任何框架(EIP和/或JMS)的情况下从头构建这样的东西是非常痛苦的,而且没有任何意义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52785185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档