创建SQS消息后,如何监控它何时被删除?

时间:2013-08-14 03:28:21

标签: java amazon-sqs

我的程序在SQS队列中创建一条消息,然后需要等待其中一个工作人员拉动队列上的工作来处理它。我想监视一条消息的状态,以确定它何时被删除,因为那将是我的工作指示。但我无法通过SQS API找到解决方法。

SendMessageRequest msgRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody);
SendMessageResult result = sqsClient.sendMessage(msgRequest);

String msgId = result.getMessageId();

// so, in theory, this is what I WANT to do...

while(!sqsClient.wasThisMessageDeletedYet(msgId))
   Thread.sleep(1000L);

// continue, confident that because the message was deleted, I can rely upon the fact that the result of the Worker is now stashed where it's supposed to be

什么是正确的方法“wasThisMessageDeletedYet(id)”?

2 个答案:

答案 0 :(得分:0)

我担心这样的API端点不存在;查看API参考(http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html),您可以看到没有查询消息的方法。

也许您可以尝试“更改消息可见性”,但是:

  • 有副作用
  • 您需要知道收到消息时获得的收据句柄

所以我认为你最好的办法是将这个状态存储在某个外部数据库中(如果你想留在亚马逊地区,也许是Dynamo?)。使用简单的消息ID - >布尔值映射,指示消息是否已被处理。

答案 1 :(得分:0)

另一个选项(但类似)是让消费者在响应队列中发布状态。等待必须异步完成(也许是未来)。

显然,由于交互的异步性质,处理过程中的开销以及编程的复杂性。但通常是以这种方式完成的。