我们已经开始使用 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) 递归方法让我害怕。
还有其他解决方案吗?