c# - 删除带有接收句柄的 SQS 消息

标签 c# amazon-web-services amazon-sqs receipt

我目前正在使用亚马逊的 SQS,在尝试删除当前“正在处理”的队列消息时遇到问题。

下面是一些示例代码:

ReceiveMessageRequest queueRequest = new ReceiveMessageRequest();
        queueRequest.WithMaxNumberOfMessages(1);
        queueRequest.WithQueueUrl(config.QueueURL);
        queueRequest.WithAttributeName("All");

        ReceiveMessageResponse response = sqs.ReceiveMessage(queueRequest);

        if (response.IsSetReceiveMessageResult())
        {
            ReceiveMessageResult result = response.ReceiveMessageResult;

            if (result.IsSetMessage())
            {
                if (result.Message.First() != null)
                {
                    return new Tuple<string, string, bool>(result.Message.First().ReceiptHandle, result.Message.First().Body ?? null, false);
                }
            }
        }

现在,在收到句柄和消息正文后,我将 Receipt 句柄字符串存储到云存储(例如 DynamoDB)中。然后我稍后加载处理存储服务之外的内容,并使用类似于以下内容的内容调用删除:

sqs.DeleteMessage(new DeleteMessageRequest() { QueueUrl = "urL", ReceiptHandle = handle });

但是,当运行该行时,我收到“输入收据句柄无效”错误消息。

注意,我知道这条消息还没有被重新收到,所以被记录的接收句柄应该是最新的。另请注意,我目前可以在同一个应用程序中删除消息,只需在收到消息后休眠,然后尝试按上述方式删除它!

有什么想法吗?

最佳答案

确保在执行这两个操作(ReceiveMessage 和 DeleteMessage)时使用引用队列的完全相同的 URL。

关于c# - 删除带有接收句柄的 SQS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987359/

相关文章:

c# - 将派生类强制转换为基类

amazon-web-services - 用于创建多个SQS的Cloudformation模板

node.js - AWS serverless-image-handler v3.x 因 AWS Lambda 执行环境的更改而中断

python - 使用 2 个 SQS 订阅(每个订阅都有一个 lambda 触发器)向 SNS 主题发送消息会导致空队列

java - 如何在单元测试中模拟 AmazonSQS 而不调用 SQS?

c# - 获取两个给定日期之间的所有月份名称

c# - 如何从操作的 MethodInfo 中获取 MVC 操作信息?

c# - 将文件上传到 Azure CDN 时如何获取有关 400 错误请求错误的更多信息

java - AWS Java SDK 使用旧版本的 jackson jar

mysql - AWS RDS 错误 2003