【问题标题】:Amazon SWF @Signal亚马逊 SWF @Signal
【发布时间】:2012-10-20 06:52:19
【问题描述】:

有没有办法从 Amazon SWF 工作流的活动中调用 @Signal 函数。 我希望能够通知工作流某些处理已完成,并且它应该为该处理的子集生成一个子工作流。 这将如何实现?

【问题讨论】:

    标签: java amazon-web-services amazon-swf


    【解决方案1】:

    听起来您想告诉工作流某些部分活动已完成,但您想继续运行当前活动。如果是这种情况,那么我建议您将活动分成两部分,并使用第一部分的结果来判断是否需要生成子工作流。我认为在 Flow 框架中不可能在活动中间向工作流发送信号。但您可以使用原始 SWF API 发送信号(在这种情况下,您需要将“运行 ID”作为参数之一传递给您的活动)。

    【讨论】:

      【解决方案2】:

      应使用生成的工作流外部客户端从活动代码中发送信号。 ActivityExecutionContext 包含初始化它所需的所有数据:

      public class MyActivitiesImpl implements MyActivities {
      
          private final ActivityExecutionContextProvider contextProvider = new ActivityExecutionContextProviderImpl();
      
          public void sendSignalBackActivity() {
              ActivityExecutionContext context = contextProvider.getActivityExecutionContext();
              AmazonSimpleWorkflow service = context.getService();
              String domain = context.getDomain();
              WorkflowExecution workflowExecution = context.getWorkflowExecution();
              MyWorkflowClientExternalFactory factory = new MyWorkflowClientExternalFactoryImpl(service, domain);
              GreeterClientExternal workflow = factory.getClient(workflowExecution);
              workflow.signalMethod();
          }
      }
      

      当外部客户端调用SignalWorkflowExecution SWF API 时,它可能会因间歇性连接问题而失败。因此,活动实现可能会决定捕获并处理(可能通过重试)在这种情况下抛出的AmazonServiceException

      【讨论】:

        猜你喜欢
        • 2014-10-15
        • 2017-03-22
        • 2016-11-26
        • 2012-12-08
        • 2022-12-03
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多