0

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

当我在 Github 上发现 AWS 开发工具包源时,我发现了一个名为SQSQueue的类,它与我们自己的实现 %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) 递归方法让我害怕。

还有其他解决方案吗?

4

1 回答 1

0

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

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

于 2018-03-28T18:23:42.430 回答