使 Step Functions 等待 SQS 为空的最佳方法
Best way to make Step Functions wait for the SQS to be empty
让 step function workflow
等待 sqs topic
为空然后继续工作流程的最佳方法是什么。有没有办法检查主题长度,以便我可以在阶跃函数工作流程中做出反应?这真的是解决这个问题的正确方法吗?
或者我会创建一个 lambda 来完全做到这一点并在我的 step function workflow
中触发它
提前致谢:)
您可以构建使用 Lambda 运行时的 Lambda 函数 API。然后在该 Lambda 函数中使用 SQS Java API。查看使用此方法检索队列属性。
看下面的属性。
ApproximateNumberOfMessages - Returns 队列中可见消息的大概数量
这是一个使用 SQS Java V2 API 获取消息数量的代码示例。
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class GetQueueAttributes {
public static void main(String[] args) {
final String USAGE = "\n" +
"Usage: AddQueueTags <queueName>\n\n" +
"Where:\n" +
" queueName - the name of the queue to which tags are applied.\n\n";
if (args.length != 1) {
System.out.println(USAGE);
System.exit(1);
}
String queueName = args[0];
SqsClient sqsClient = SqsClient.builder()
.region(Region.US_WEST_2)
.build();
try {
GetQueueUrlResponse getQueueUrlResponse =
sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();
// Specify the attributes to retrieve.
List<QueueAttributeName> atts = new ArrayList();
atts.add(QueueAttributeName.APPROXIMATE_NUMBER_OF_MESSAGES);
GetQueueAttributesRequest attributesRequest= GetQueueAttributesRequest.builder()
.queueUrl(queueUrl)
.attributeNames(atts)
.build();
GetQueueAttributesResponse response = sqsClient.getQueueAttributes(attributesRequest);
Map<String,String> queueAtts = response.attributesAsStrings();
for (Map.Entry<String,String> queueAtt : queueAtts.entrySet())
System.out.println("Key = " + queueAtt.getKey() +
", Value = " + queueAtt.getValue());
} catch (SqsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
很棒的是,您可以创建不同的 Lambda 函数,然后使用 Step Functions 将每个 Lambda 函数挂钩为一个工作流步骤。这是构建工作流并让该工作流中的每个步骤使用 AWS Java API 执行特定 AWS 服务操作的好方法。
要了解如何将 Lambda 函数挂接到工作流中,请参阅本教程。
Create AWS serverless workflows by using the AWS SDK for Java
让 step function workflow
等待 sqs topic
为空然后继续工作流程的最佳方法是什么。有没有办法检查主题长度,以便我可以在阶跃函数工作流程中做出反应?这真的是解决这个问题的正确方法吗?
或者我会创建一个 lambda 来完全做到这一点并在我的 step function workflow
提前致谢:)
您可以构建使用 Lambda 运行时的 Lambda 函数 API。然后在该 Lambda 函数中使用 SQS Java API。查看使用此方法检索队列属性。
看下面的属性。
ApproximateNumberOfMessages - Returns 队列中可见消息的大概数量
这是一个使用 SQS Java V2 API 获取消息数量的代码示例。
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class GetQueueAttributes {
public static void main(String[] args) {
final String USAGE = "\n" +
"Usage: AddQueueTags <queueName>\n\n" +
"Where:\n" +
" queueName - the name of the queue to which tags are applied.\n\n";
if (args.length != 1) {
System.out.println(USAGE);
System.exit(1);
}
String queueName = args[0];
SqsClient sqsClient = SqsClient.builder()
.region(Region.US_WEST_2)
.build();
try {
GetQueueUrlResponse getQueueUrlResponse =
sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();
// Specify the attributes to retrieve.
List<QueueAttributeName> atts = new ArrayList();
atts.add(QueueAttributeName.APPROXIMATE_NUMBER_OF_MESSAGES);
GetQueueAttributesRequest attributesRequest= GetQueueAttributesRequest.builder()
.queueUrl(queueUrl)
.attributeNames(atts)
.build();
GetQueueAttributesResponse response = sqsClient.getQueueAttributes(attributesRequest);
Map<String,String> queueAtts = response.attributesAsStrings();
for (Map.Entry<String,String> queueAtt : queueAtts.entrySet())
System.out.println("Key = " + queueAtt.getKey() +
", Value = " + queueAtt.getValue());
} catch (SqsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
很棒的是,您可以创建不同的 Lambda 函数,然后使用 Step Functions 将每个 Lambda 函数挂钩为一个工作流步骤。这是构建工作流并让该工作流中的每个步骤使用 AWS Java API 执行特定 AWS 服务操作的好方法。
要了解如何将 Lambda 函数挂接到工作流中,请参阅本教程。
Create AWS serverless workflows by using the AWS SDK for Java