Search code examples
aws-sdkaws-step-functions

AWS SDK in java - How to get activities from worker when multple execution on going for a state machine


AWS Step Function

My problem is to how to sendTaskSuccess or sendTaskFailuer to Activity which are running under the state machine in AWS .

My Actual intent is to Notify the specific activities which belongs to particular State machine execution.

I successfully send notification to all waiting activities by activityARN. But my actual need is to send notification to specific activity which belong to particular state machine execution .

Example . StateMachine - SM1 There two execution on going for SM1-- SM1E1, SM1E2 . In that case I want to sendTaskSuccess to activity which belongs to SM1E1 .

follwoing code i used . But it send notification to all activities

        GetActivityTaskResult getActivityTaskResult = client.getActivityTask(new GetActivityTaskRequest()
                .withActivityArn("arn detail"));

        if (getActivityTaskResult.getTaskToken() != null) {
            try {
                JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput());

                    String outputResult = patientRegistrationActivity.setStatus(json.get("patientId").textValue());
                    System.out.println("outputResult " + outputResult);
                    SendTaskSuccessRequest sendTaskRequest = new SendTaskSuccessRequest().withOutput(outputResult)
                            .withTaskToken(getActivityTaskResult.getTaskToken());
                    client.sendTaskSuccess(sendTaskRequest);


            } catch (Exception e) {
                client.sendTaskFailure(
                        new SendTaskFailureRequest().withTaskToken(getActivityTaskResult.getTaskToken()));
            }

Solution

  • I did a POC to check and below is the solution .

    if token is consumed by getActivityTaskResult.getTaskToken() and if your conditions not satisfied by request input then you can use below line to avoid token consumption .awsStepFunctionClient.sendTaskHeartbeat(new SendTaskHeartbeatRequest().withTaskToken(taskToken))