C# 删除带有回执句柄的SQS消息
我目前正在使用amazon的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
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 });