Как подтвердить доставку сообщения в очередь Amazon SQS?

Я использую AWS sdk для разработки pub-sub очереди на основе SQS.

В самом базовом прототипе я одновременно отправляю сообщения в очередь, которую я уже создал. Однако как я могу быть уверен, что мои сообщения помещаются в очередь?

Какая гарантия того, что отправленные сообщения не завершатся ошибкой по какой-либо причине?

Запрос Amazon API предоставляет ResponseMetadata, у которого есть RequestID, связанный с этим конкретным запросом на отправку сообщения. Достаточно ли этого, чтобы точно подтвердить отправку сообщения в очередь?

String requestId = sqs.sendMessage(request).getSdkResponseMetadata().getRequestId();

Не дает ли запрос Amazon sendmessage тело ответа с Http-кодом?


person The-Proton-Resurgence    schedule 26.09.2016    source источник


Ответы (2)


См. SendMessageResult. Там getMessageId(), который должен дать вам идентификатор сообщения, который был назначен сообщению SQS. Если вы это поняли, сообщение наверняка было доставлено. Потребитель сообщения имеет доступ к этому же идентификатору при получении сообщения, и этот идентификатор равен разработан, чтобы быть глобально уникальным в течение длительного периода времени.

person Michael - sqlbot    schedule 26.09.2016
comment
Так что же вернет getMessageId (), если сообщение не будет успешно поставлено в очередь? Должен ли я просто проверить, имеет ли messageId значение null или нет? - person as2d3; 29.07.2019
comment
@ as2d3 ничего. Идентификатор сообщения создается и возвращается службой (не локально SDK), поэтому он не может иметь значения, если сообщение не было поставлено в очередь. Ошибка отправки сообщения должна вызывать исключение откуда-то из вышестоящего канала. - person Michael - sqlbot; 29.07.2019
comment
Если getMessageId ()! = Null ... значит, оно было успешно отправлено? - person Dan; 05.02.2020
comment
Странно то, что хотя я получаю messageid, но когда я проверяю очередь, иногда он показывает 0 сообщений. сообщение никогда не приходит. - person openCivilisation; 20.06.2021

AWS SendMessageRequest отправляет код состояния для каждого запроса на отправку отправляемых сообщений.

int statusCode =     sendMessageResult.getSdkHttpMetadata().getHttpStatusCode();

Но это не удастся для пакета отправленных сообщений, поскольку мы не будем знать, какие из них в пакете не были отправлены успешно.

person The-Proton-Resurgence    schedule 26.09.2016
comment
Итак, вы используете класс SendMessageBatchResult. Майкл ответил на ваш первоначальный вопрос. - person jzonthemtn; 26.09.2016