2012-10-30 32 views
1

是否有方法在Amazon SWF工作流中的Activity中調用@Signal函數。 我希望能夠通知工作流某些處理已完成,並且應爲該處理的子集產生子工作流。 這將如何完成?Amazon SWF @Signal

回答

1

聽起來好像您要告訴工作流程,某些活動的一部分已完成,但您想要繼續運行當前活動。如果是這種情況,那麼我建議您將活動分成兩部分,並使用第一部分的結果來判斷是否需要生成子工作流程。我不認爲在Flow框架中可以在工作流程中發送信號。但是,您可以使用原始SWF API發送信號(在這種情況下,您需要將「運行ID」作爲參數之一傳遞給您的活動)。

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