我的程序在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)”?
答案 0 :(得分:0)
我担心这样的API端点不存在;查看API参考(http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html),您可以看到没有查询消息的方法。
也许您可以尝试“更改消息可见性”,但是:
所以我认为你最好的办法是将这个状态存储在某个外部数据库中(如果你想留在亚马逊地区,也许是Dynamo?)。使用简单的消息ID - >布尔值映射,指示消息是否已被处理。
答案 1 :(得分:0)
另一个选项(但类似)是让消费者在响应队列中发布状态。等待必须异步完成(也许是未来)。
显然,由于交互的异步性质,处理过程中的开销以及编程的复杂性。但通常是以这种方式完成的。