首页 > 解决方案 > java中的AWS SDK - 如何在状态机上进行多次执行时从工作人员那里获取活动

问题描述

AWS 步骤函数

我的问题是如何将 sendTaskSuccess 或 sendTaskFailuer 发送到在 AWS 的状态机下运行的 Activity 。

我的实际意图是通知属于特定状态机执行的特定活动。

我通过 activityARN 成功向所有等待活动发送通知。但我的实际需要是向属于特定状态机执行的特定活动发送通知。

例子 。StateMachine - SM1 有两个执行 SM1-- SM1E1, SM1E2 。在这种情况下,我想将 sendTaskSuccess 发送到属于 SM1E1 的活动。

以下代码我使用。但它会向所有活动发送通知

        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()));
            }

标签: aws-sdkaws-step-functions

解决方案


我做了一个 POC 来检查,下面是解决方案。

如果令牌被消耗getActivityTaskResult.getTaskToken()并且如果请求输入不满足您的条件,那么您可以使用下面的行来避免令牌消耗.awsStepFunctionClient.sendTaskHeartbeat(new SendTaskHeartbeatRequest().withTaskToken(taskToken))


推荐阅读