我目前正在使用亚马逊的 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/