亚马逊SWF @Signal

时间:2012-10-30 20:48:26

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

有没有办法从Amazon SWF工作流程中的Activity中调用@Signal函数。 我希望能够通知工作流一些处理已经完成,并且应该为该处理子集生成子工作流。 怎么会这样做?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

生成的工作流外部客户端应该用于从活动代码中发送信号。 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,这种情况会引发。