[英]Returning Promise from AWS.SWF Workflow
根據swf-docs ,似乎出現以下代碼:
@Workflow
@WorkflowRegistrationOptions(
defaultExecutionStartToCloseTimeoutSeconds = 60,
defaultTaskStartToCloseTimeoutSeconds = 10)
public interface MyWorkflow
{
@Execute(version = "1.0")
Promise<String> startMyWF(int a, String b);
}
應該生成返回Promise<String>
MyWorkflowClientExternal
; 即:
Promise<String> startMyWF(int a, String b);
但是,將為MyWorkflowClientExternal
和MyWorkflowClientExternalImpl
生成一個void方法:
void startMyWF(int a, String b) ...
內部客戶端MyWorkflowClient
和MyWorkflowClientImpl
確實按預期返回Promise對象:
Promise<String> startMyWF(int a, String b);
我想使用ExternalClient
; 但它似乎沒有返回Promise
對象。 我非常感謝您的澄清。
謝謝。
我在AWS-SWF開發人員論壇上發布了這個問題 ; @ maxim-fateev指出了幾種方法:
工作流程的返回值對於子工作流程非常有用,因為它們被建模為異步調用。 對於獨立的工作流程,可以使用以下選項之一來檢索結果:
1)使用SWF API GetWorkflowExecutionHistory從工作流歷史記錄中獲取它(結果在WorkflowExecutionCompleted事件中)。 您也可以使用SWF控制台檢查歷史記錄。
2)設計工作流程以將結果放置在某處,例如,您可以在末尾添加一個活動以將結果放置在商店中,並讓應用程序定期在該處查看。
3)在啟動工作流程執行的程序中托管活動。 現在,工作流啟動程序成為工作流的一部分,並且可以將其承載的活動傳遞給工作流的結果。
您可以在手動操作的工具中使用第一個選項。 但是,不建議將它作為應用程序檢索工作流結果的通用機制,因為它實際上需要您輪詢SWF以檢查工作流是否完成,並且違反了我們的長期輪詢設計。
我采用了方法2。 這就是要點(如果您認為有更好的方法,請告訴我)。
創建了NotificationActivityImpl
:
public class NotificationActivitiesImpl implements NotificationActivities {
private Object notification;
public NotificationActivitiesImpl() {
this.notification = null;
}
@Override
public void notify(Object obj) {
this.notification = obj;
}
/**
* @return notification (will block until it is available)
*/
@Override
public Object getNotification() {
while (notification == null ){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return notification;
}
}
在WorkflowImpl
添加:
notificationClient.notify(obj) // obj that want to pass back to your app
在應用程序(啟動工作流程;和NotificationAcitivityWorker)中,添加了以下內容:
workflowWorker.start();
notificationWorker.start();
NotificationActivitiesImpl notificationImpl = (NotificationActivitiesImpl) notificationWorker.getActivitiesImplementations().iterator().next();
Object notification = notificationImpl.getNotification();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.