如何使用AWS Flow Framework for Ruby获取可重试活动的结果?

时间:2014-04-16 03:41:40

标签: ruby amazon-web-services workflow amazon-swf

我有以下SWF工作流,它异步调用2个活动,获取结果,并将其传递给第三个活动:

a_future = Future.new.set
b_future = Future.new.set

a_future = activity.send_async(:a_activity, arg1)
b_future = activity.send_async(:b_activity, arg2)

wait_for_all(a_future, b_future)
a_url = a_future.get
b_url = b_future.get

activity.c_activity(arg1, a_url, b_url)

按原样运行时,我会在a_urlb_url中获得预期的返回值(在本例中为URL)。

但是,当我向活动添加重试逻辑时

activity :a_activity, :b_activity, :c_activity do
  {
    version: "0.0.1",
    default_task_list: $activity_task_list,
    default_task_schedule_to_start_timeout: 30,
    default_task_start_to_close_timeout: 30,
    # ADD the next 3 lines for retry logic
    exponential_retry: {
      maximum_attempts: 5,
    }
  }
end

a_future.get的值不是字符串网址,而是:

#<AWS::Flow::Utilities::AddressableFuture:0x007fe87243d908>

我无法弄清楚如何从AddressableFuture获得结果。

我尝试编写一些包含和不使用重试逻辑的包装器代码:

def get_return_value(future)
  value = future.get
  if value.kind_of? AWS::Flow::Utilities::AddressableFuture
    value = value.return_value.get
  end

  return value
end

然后:

a_url = get_return_value(a_future)
b_url = get_return_value(b_future)

...但这只是圈内而且仍然没有得到结果。

关于如何从两个活动中获取返回值,并在活动重试逻辑时将其传递给第三个活动的任何想法?

0 个答案:

没有答案