Amazon Sqs 队列抽象

Amazon Sqs Queue abstraction

我们已经开始使用 Amazon SQS,并借助 documentation 中提供的代码片段实施了队列抽象。

当我在 Github 上发现 AWS SDK 源代码时,我发现了一个名为 SQSQueue 的 class,它与我们自己的实现有 %80 相同。

1 - 是否在任何地方记录了它? (自动生成的 Doxygen 输出除外)

2 - 提供的实现中唯一有缺陷的部分是即使队列不为空,它也会一直等到轮询周期到期。换句话说,如果队列中有多个元素,它应该继续接收消息而不用等待轮询周期。

我能想到的唯一解决方案是通过以下方式实现接收回调:

void messageReceived(const Aws::Queues::Queue<Aws::SQS::Model::Message>* queue, const Aws::SQS::Model::Message& message, bool& deleteMessage)
{
    /* Process message */
    deleteMessage = true;

    auto newMessage = queue->Top();
    if (newMessage.GetBody().empty() == false) {
        bool deleteNewMessage = false;
        messageReceived(queue, newMessage, deleteNewMessage);

        if(deleteNewMessage) {
            auto nonConstQueue = const_cast<Aws::Queues::Queue<Aws::SQS::Model::Message>*>(queue);
            nonConstQueue->Delete(newMessage);
        }
    }

}

然而,

a) 我讨厌 const_cast.

b) 递归方法让我害怕。

还有其他解决办法吗?

为了回答你的第一个问题,它没有在任何地方记录。它是由 AWS SDK 为 C++ 团队编写的 SQS 高级实用程序。

关于第二个问题。我在 Github 上看到过类似的 PR 来修改实现以使其更有效。我们会考虑尽快合并。