talend - 基于REST请求结果重试子工作

时间:2016-10-26 20:47:09

标签: rest talend

我有一个RESTful api我试图使用talend消费  为了获得数据,需要2个api调用,第一个为您的报告生成一个ID,然后您可以使用该ID进行连续的api调用以获取数据结果

问题是,如果第二次api呼叫中请求的报告尚未完成,则返回

[{data:{string:"Requested report ### has not finished processing yet, please try again later"}}]

所以,我把一个tJava线程(5000)从第二次api调用(tRestClient1)错开第一次api调用(tRestClient2),但我可以预见这是一个问题

我想要做的是评估第二个tRest请求结果(tFileOutputJSON_3),如果它等于"请求报告...",则将第二个tRest请求重新排队,直到数据准备就绪

这是我工作的截图

enter image description here

1 个答案:

答案 0 :(得分:1)

总是有很多解决方案。 但是你离你想要的不远。以下设计应尊重您的期望:

我保留了你的组件,因为我不知道你在做什么(我退休tLogrow使事情简洁)。但我重组了调度链接。

  

tJava
  | onSubjobOk
   tRestClient - >   tFileOutputJSON
  | onSubjobOk
  tFileInputJSON-->   tExtractJSONFields - > tJavaRow
   | onSubjobOk
  tSetGlobalVar 1
   | onSubjobOk
  tLoop 2 - iterate(order1) - > tRestClient - >   tHashOutput 3
  | - 迭代   (order2) - > tHashInput 4 - > tJavaRow 5
  | - 迭代   (order3) - >持续时间达到tSLEEP 6
  | onSubjobOk
  tHashInput 7 - > tFileOutputJSON

1 :使用变量来管理循环 2 :使用While循环。将声明和迭代留空(“”),并使用先前初始化的变量设置条件。 3 :不要使用追加,因为你想在每个循环中获取新结果。
4 :将其链接到您的HashOutput并且不清除缓存 5 :你的工作在这里吗?不要忘记更新全局变量 6 :如果在报告准备好之前大多数电话需要时间,可以在电话会议前放置 7 :将它链接到您的HashOutput,您将能够获取结束循环的数据。