【问题标题】:talend - retry subjob based on REST request resultstalend - 根据 REST 请求结果重试子作业
【发布时间】:2016-10-26 20:47:08
【问题描述】:

我有一个 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 请求,直到数据准备好

这是我的工作截图

【问题讨论】:

  • 从您的 tJavaRow_1 您可以使用 tLoop 启动一个 while 循环并设置一个全局变量来说明您是否应该继续循环,首先您应该将其设置为条件 while 循环继续,然后您转到 tRestClient_1 并获取值并解析 tFileoutputJSON_3 并根据响应将此全局变量的此值设置为继续 while 循环或退出它。你甚至可能想添加一个 tSleep 来增加延迟
  • 我猜你修改了截图的工作流程,但如果不是这种情况,你应该阅读 this good practices guide 特别是 Canvas Workflow & Layout 部分。
  • @JulienBreuil 我确实修改了,但非常感谢该链接

标签: rest talend


【解决方案1】:

像往常一样,有很多解决方案。 但你离你想要的并不远。以下设计应该尊重您的期望:

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

tJava
|onSubjobOk
tRestClient --> tFileOutputJSON
|onSubjobOk
tFileInputJSON--> tExtractJSONFields --> tJavaRow
|onSubjobOk
tSetGlobalVar1
|onSubjobOk
tLoop2 -- 迭代(order1)--> tRestClient --> tHashOutput3
| -- 迭代 (order2)--> tHashInput4 --> tJavaRow5
| -- 迭代 (order3)--> tSleep6
|onSubjobOk
tHashInput7 --> tFileOutputJSON

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

【讨论】:

  • 如果我确实使用了断线,我就无法发布。我会尝试编辑,但目前我不明白为什么网站在格式正确时会阻止我的答案。
  • 嗯,现在应该可以阅读了,但我仍然无法移动帖子底部的 ^3 行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多