Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除带有回执句柄的SQS消息_C#_Amazon Web Services_Amazon Sqs_Receipt - Fatal编程技术网

C# 删除带有回执句柄的SQS消息

C# 删除带有回执句柄的SQS消息,c#,amazon-web-services,amazon-sqs,receipt,C#,Amazon Web Services,Amazon Sqs,Receipt,我目前正在使用amazon的SQS,在尝试删除当前“正在运行”的队列消息时遇到问题 下面是一些示例代码: ReceiveMessageRequest queueRequest = new ReceiveMessageRequest(); queueRequest.WithMaxNumberOfMessages(1); queueRequest.WithQueueUrl(config.QueueURL); queueRequest.WithAttri

我目前正在使用amazon的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);
                }
            }
        }
但是,当运行该行时,我收到一条“输入接收句柄无效”错误消息

注意,我知道此消息尚未重新接收,因此正在记录的接收句柄应该是最新的。还请注意,我目前可以删除同一应用程序中的消息,只需在收到消息后休眠,然后如上所述尝试删除它


有什么想法吗?

您必须等到消息的可视性超时过期后才能再次对其执行操作。这使计算机有时间处理该消息,以便执行它需要执行的任何操作。

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

ReceiptHandle包含一些对URL敏感的特殊字符。因此,您需要首先对其进行URL编码。我也这么做了,结果成功了。

你解决了这个问题吗?我似乎遇到了同样的问题。假设机器a正在处理消息X。机器a将可见性超时设置为2天。然后它开始对该消息进行操作(删除它)。这样行吗?
sqs.DeleteMessage(new DeleteMessageRequest() { QueueUrl = "urL", ReceiptHandle = handle });