Amazon Sqs Очередная абстракция

Мы начали работать с Amazon SQS и реализовали абстракцию очереди с помощью фрагментов, предоставленных в документация.

Пока я обнаруживал источник AWS SDK на Github, я обнаружил класс под названием 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);
}
}

}

Тем не мение,

а) я ненавижу const_cast.

б) Рекурсивные методы меня пугают.

Есть ли другое решение?

0

Решение

Чтобы ответить на первый вопрос, он нигде не задокументирован. Это утилита высокого уровня SQS, написанная AWS SDK для команды C ++.

Относительно второго вопроса. Я видел похожий PR на Github, чтобы изменить реализацию, чтобы сделать ее более эффективной. Мы рассмотрим слияние как можно скорее.

0

Другие решения

Других решений пока нет …