0

我有一個用例,我希望我的系統中有10個工作線程。此外,6個工作線程應輪詢一個任務列表和4個工作線程到另一個任務列表。活動的單獨任務列表 - AWS SWF

我在Flow Framework上以這種方式配置了我的代碼。

我的一項活動被註冊到不同的任務列表中。所有其他活動都設爲默認任務列表。我有6個工作線程正在偵聽默認任務列表,其餘4個正在偵聽另一個任務列表。

但是當我執行我的工作流程,我得到的錯誤:

Task List Name: CIMSProposalActivityValidationTList

Identity: [email protected]

Details: ["java.lang.IllegalStateException",{"cause":null,"stackTrace":[{"methodName":"current","fileName":"AsyncContextBase.java","lineNumber":27,"className":"com.amazonaws.services.simpleworkflow.flow.core.AsyncContextBase","nativeMethod":false},{"methodName":"","fileName":"AsyncContextBase.java","lineNumber":49,"className":"com.amazonaws.services.simpleworkflow.flow.core.AsyncContextBase","nativeMethod":false},{"methodName":"","fileName":"TryCatchFinallyContext.java","lineNumber":46,"className":"com.amazonaws.services.simpleworkflow.flow.core.TryCatchFinallyContext","nativeMethod":false},{"methodName":"","fileName":"TryCatchFinally.java","lineNumber":233,"className":"com.amazonaws.services.simpleworkflow.flow.core.TryCatchFinally","nativeMethod":false},{"methodName":"","fileName":"TryCatch.java","lineNumber":22,"className":"com.amazonaws.services.simpleworkflow.flow.core.TryCatch","nativeMethod":false},{"methodName":"","fileName":"GrooveScheduleAspect.java","lineNumber":93,"className":"com.amazon.transportation.groove.aspectj.GrooveScheduleAspect$1","nativeMethod":false},{"methodName":"processGrooveSchedule","fileName":"GrooveScheduleAspect.java","lineNumber":93,"className":"com.amazon.transportation.groove.aspectj.GrooveScheduleAspect","nativeMethod":false},{"methodName":"validate","fileName":"ValidationActivitiesImpl.java","lineNumber":23,"className":"com.amazon.cimsworkflow.activities.impl.ValidationActivitiesImpl","nativeMethod":false},{"methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":57,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"sun.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"methodName":"invoke","fileName":"Method.java","lineNumber":606,"className":"java.lang.reflect.Method","nativeMethod":false},{"methodName":"execute","fileName":"POJOActivityImplementation.java","lineNumber":63,"className":"com.amazonaws.services.simpleworkflow.flow.pojo.POJOActivityImplementation","nativeMethod":false},{"methodName":"execute","fileName":"ActivityImplementationBase.java","lineNumber":46,"className":"com.amazonaws.services.simpleworkflow.flow.generic.ActivityImplementationBase","nativeMethod":false},{"methodName":"execute","fileName":"SynchronousActivityTaskPoller.java","lineNumber":196,"className":"com.amazonaws.services.simpleworkflow.flow.worker.SynchronousActivityTaskPoller","nativeMethod":false},{"methodName":"run","fileName":"ActivityTaskPoller.java","lineNumber":97,"className":"com.amazonaws.services.simpleworkflow.flow.worker.ActivityTaskPoller$1","nativeMethod":false},{"methodName":"runWorker","fileName":"ThreadPoolExecutor.java","lineNumber":1145,"className":"java.util.concurrent.ThreadPoolExecutor","nativeMethod":false},{"methodName":"run","fileName":"ThreadPoolExecutor.java","lineNumber":615,"className":"java.util.concurrent.ThreadPoolExecutor$Worker","nativeMethod":false},{"methodName":"run","fileName":"Thread.java","lineNumber":744,"className":"java.lang.Thread","nativeMethod":false}],"message":"Attempt to execute asynchronous code outside of AsyncScope.doAsync() method","localizedMessage":"Attempt to execute asynchronous code outside of AsyncScope.doAsync() method","suppressed":["[Ljava.lang.Throwable;",[]]}]

原因

  • Attempt to execute asynchronous code outside of AsyncScope.doAsync() method

我的任務列表是新一個我創建。線程也如預期。但我得到這個錯誤。任何導致如何解決這個問題。請回復

回答

1

AWS Flow Framework活動實施不能包含任何異步代碼。所有這些代碼只能在工作流程實現中使用。從堆棧跟蹤看,您的活動實施看起來像參考TryCatch類,它只能用於異步錯誤處理。

+1

您是否可以在使用手動完成的活動中實現異步實現? – vvondra 2015-09-08 13:28:54

+0

是的,活動可以異步實現,因爲完成請求可以來自任何線程或甚至進程。但問題在於Pradeep試圖在不支持開箱即用的活動實現中使用Flow Framework異步TryCatch。確實有可能使用Flow Framework在工作流作用域之外實現異步程序。使用com.amazonaws.services.simpleworkflow.flow.core.AsyncScope作爲根作用域和eventLoop。 – 2015-09-08 18:11:53

-1

不同的活動不能有相同的任務列表名稱。每個活動需要不同的任務列表名稱。 如果要使用相同的活動輪詢多個任務列表,請運行同一活動的多個實例,並讓每個實例輪詢不同的任務列表。