Amazon SWF查询

时间:2017-01-11 16:51:39

标签: amazon-swf

在过去的几年里,我在Amazon SWF上做了大量的工作,但我仍然不清楚以下几点,我还没有在任何论坛上找到任何直接的答案。

这些是我想的非常基本的要求,确定其他人也可能遇到过。如果有人能澄清这些,那就太棒了。

  1. 是否有一种简单的方法可以将工作流执行结果(可能只是布尔一样简单)返回给工作流启动器?
  2. 有没有办法捕获活动超时异常,以便我们可以在这种情况下运行自定义操作?
  3. 为什么WorkflowExecutionHistory不包含活动,为什么只包含事件?
  4. 为什么没有简单的方法从失败的角度重新启动工作流程?
  5. 我正在考虑在我的工作场所使用SWF进行更多业务流程,但这些限制/疑点阻碍了我!

    最终工作解决方案

    $('.typeahead').typeahead({
        hint: false,
        highlight: true,
        minLength: 3,
    },
    {
        name: 'firstnames',
        displayKey: 'value',
        source: firstnames.ttAdapter(), // this is your result variable
        templates: {
            empty: function(context){
            //  console.log(1) // put here your code when result not found
              $(".tt-dataset").text('No Results Found');
            }
        }
    

1 个答案:

答案 0 :(得分:2)

  1. 标准模式是在工作流启动程序进程中托管一个特殊活动,用于传递结果。使用特定于进程的任务列表以确保将其路由到正确的启动器实例。以下是实施它的步骤:

    • 定义要接收结果的活动。例如“returnResultActivity”。使此活动实现完成将在执行时传递给其构造函数的Future。
    • 当工作流启动时,它会收到“resultActivityTaskList”作为输入参数。最后,工作流使用工作流结果调用此活动。活动安排在传递的任务列表中。
    • 工作流启动器创建一个ActivityWorker和一个Future实例。然后它创建一个“returnResultActivity”实例,该未来作为构造函数参数。
    • 然后,它将活动实例注册到活动工作程序,并将其配置为轮询在随机生成的任务列表名称上。然后它调用“启动工作流程执行”,将生成的任务列表名称作为输入参数传递。
    • 然后等待Future完成。 future.get()将返回工作流结果。
  2. 是的,如果您使用的是AWS Flow Framework,则在活动超时时会引发超时异常。如果你没有使用Flow框架,那么你的生活将会变得更加艰难。顺便说一下,工作流超时也作为超时异常被抛入父工作流。无法从超时实例本身捕获工作流超时异常。在这种情况下,建议不要依赖工作流超时,而只需创建一个计时器,该计时器将触发并通知工作流逻辑某些业务事件已超时。

  3. 因为单个活动执行有多个与之关联的事件。编写将历史转换为您喜欢的任何活动表示的代码应该非常容易。这样的代码只匹配与每个活动相关的事件。每个事件总是引用相关事件,因此很容易将它们汇总到更高级别的表示中。

  4. 不幸的是,这个没有简单的答案。理想情况下,SWF将通过将其历史记录复制到故障点来支持重新启动工作流程。但它不受支持。我个人认为工作流应该以一种永不失败的方式编写,但始终处理失败而不会失败。显然,由于意外情况导致故障,它不起作用。在这种情况下,以一种可以从头重新开始的方式编写工作流是最简单的方法。