我有一个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请求重新排队,直到数据准备就绪
这是我工作的截图
答案 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,您将能够获取结束循环的数据。