等待任务和加入任务

时间:2017-06-02 13:38:14

标签: join workflow wait netflix

我正在使用加入和等待任务创建工作流程,但我真的不明白它是如何工作的。当我尝试时,我收到内部服务器错误。

关于" JOIN"任务,我认为当fork中的不同任务完成时,连接任务已完成但事实并非如此。所以,我真的不了解这项任务的兴趣。

这是我工作流程的一个示例:

[{
  "name": "sendMySms",
  "description": "Simple http flow",
  "version": 3,
  "tasks": [{
      "name": "fork_join",
      "taskReferenceName": "forkx",
      "type": "FORK_JOIN",
      "forkTasks": [
        [{
            "startDelay": 0,
            "name": "wait_status_affected",
            "taskReferenceName": "wait_status_affected",
            "type": "WAIT"
          },
          {
            "name": "send_my_sms",
            "taskReferenceName": "send_sms",
            "inputParameters": {
              "http_request": {
                "uri": "http://localhost:10200/Notify/NotifySms?phone_number=${workflow.input.phone_number}&message=${workflow.input.message}",
                "method": "POST",
                "contentType": "application/x-www-form-urlencoded"
              }
            },
            "type": "HTTP",
            "startDelay": 0
          }
        ],
        [{
          "name": "send_my_sms2",
          "taskReferenceName": "send_sms_2",
          "inputParameters": {
            "http_request": {
              "uri": "http://localhost:10200/Notify/NotifySms?phone_number=${workflow.input.phone_number}&message=${workflow.input.message2}",
              "method": "POST",
              "contentType": "application/x-www-form-urlencoded"
            }
          },
          "type": "HTTP",
          "startDelay": 0
        }]
      ],
      "startDelay": 0
    },
    {
      "name": "Claim Affected",
      "taskReferenceName": "ClaimAffected",
      "startDelay": 60,
      "callbackAfterSeconds": 10,
      "type": "JOIN",
      "joinOn": [
        "send_my_sms",
        "send_my_sms2"
      ]
    },
    {
      "name": "send_my_sms3",
      "taskReferenceName": "send_sms_3",
      "inputParameters": {
        "http_request": {
          "uri": "http://localhost:10200/Notify/NotifyEmail?subject=Info&mail_to=test@mytest.com&message=fin",
          "method": "POST",
          "contentType": "application/x-www-form-urlencoded"
        }
      },
      "type": "HTTP",
      "startDelay": 0
    }
  ],
  "schemaVersion": 2
}]

1 个答案:

答案 0 :(得分:0)

FORK_JOIN任务分配一组并行任务。计划每个集合并行执行。但是集合中的任务是连续执行的。

在您的情况下,您有两组并行任务:[wait_status_affected,send_sms]和[send_sms_2]

WAIT任务保持IN_PROGRESS状态,直到被外部触发器标记为COMPLETED或FAILED(例如Swagger)。

因此,send_sms将不会开始启动,直到wait_status_affected被标记为已完成,因为这两个将被串行调度。

JOIN任务,ClaimAffected等待[send_my_sms,send_my_sms2]。但它们是任务名称,而不是任务引用名称。相应的任务引用名称为send_sms和send_sms_2。

taskReferenceName是工作流中用于引用任务的其他任务的名称。

joinOn属性需要JOIN任务等待完成的任务引用名称列表。因此,将您的joinOn更改为[“send_sms”,“send_sms_2”]