Как работает автоповтор при доставке сообщения в AWS SNS или SQS - PullRequest
0 голосов
/ 17 января 2020

Я читал некоторую документацию по обработке повторных попыток при сбое на стороне AWS SDK.

вот они: https://github.com/aws/aws-sdk-java-v2/blob/master/docs/LaunchChangelog.md#134 -client-override-retry-configuration и https://github.com/aws/aws-sdk-java-v2/blob/master/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/retry/SdkDefaultRetrySetting.java

Похоже, AWS будет автоматически обрабатывать повтор при сбое, и если я хочу настроить его, мне придется использовать «ClientConfiguration» для этой цели.

Я сомневаюсь, как это работает? Допустим, я опубликовал sh одно сообщение для SNS topi c. Сможет ли AWS справиться с этим, если сообщение не будет успешно опубликовано? Или я, звонящий, должен справиться с этим?

Требуется ли приведенный ниже код для обработки повторных попыток?

int retry = 0;

        try {
            for ( ; retry < 5; retry++) {
                if (retry > 0) {
                    log.info("Failed to publish to SNS - attempting a retry [#{}]", retry);
                }
                final PublishRequest publishRequest = PublishRequest.builder()
                        .message("Message 1")
                        .topicArn(topicArn)
                        .build();
                final PublishResponse result = this.snsClient.publish(publishRequest);

                if (Objects.nonNull(result) && StringUtils.isNotBlank(result.messageId())) {
                    log.debug("Published message [{}] successfully in {}ms", message, (System.currentTimeMillis() - opStartTime));
                    return;
                }
            }
            log.info("Retry exhausted. Message [{}] could not be published to topic [{}]", message, topicArn);
        } catch (final Exception exn) {
            log.error("Unable to publish message [{}] to SNS topic [{}]", message, topicArn, exn);
        }
...