Не создавайте AWS SNS Topi c, если он еще не существует - PullRequest
0 голосов
/ 03 мая 2020

Я использую AWSSDK.SimpleNotificationService (C#) для AWS службы SNS. У нас есть пользовательский метод Publi sh, который используется для публикации sh сообщений в SNS. В настоящее время сообщение publi sh выглядит примерно так:

public void Publish(string topicName, string message)
{
    //private readonly IAmazonSimpleNotificationService _snsClient; (just showing how _snsClient is created)
    var result = await _snsClient.CreateTopicAsync(_topicName).ConfigureAwait(false);
    snsClient.Publish(message);

}

Создает новый topi c, если он уже не существует.

Я знаю CreateTopicAsyn c является идемпотентом и создаст топи c и вернет ответ с ARN, если топи c еще не существует.

Мой вариант использования : я хочу топи c быть НЕ созданным, если оно еще не существует. Любые указатели?

Что я исследовал?

  • GetTopicAttributesAsyn c -> Эта функция возвращает атрибуты topi c, если таковые существуют, в противном случае возвращает исключение 404. Это может быть хорошим способом проверить, существует ли topi c или нет, но проблема в том, что он принимает topi c ARN, в отличие от CreateTopicAsyn c, который принимает topicName. Моя проблема в том, что я не могу иметь тему ARN, поскольку я не знаю, существует ли topi c или нет (Infact, это то, что я хочу сделать)

Я собирался сделать что-то вроде ниже, за исключением того, что метод GetTopicAttributesAsyn c не будет принимать topicName. Следовательно, меня блокируют:

public void Publish(string topicName, string message)
{
    //private readonly IAmazonSimpleNotificationService _snsClient; (just showing how _snsClient is created)
    var topicAttributes = await _snsClient.GetTopicAttributesAsync(topicName).ConfigureAwait(false);
    if (topicAttributes.HttpStatusCode == System.Net.HttpStatusCode.NotFound)
            {
                throw new ApplicationException($"SNS topic '{topicName}' does not exist. Not creating a new one.");

            }
    snsclient.Publish(message);
    return;
}

Вопрос :

  1. Есть ли другой способ, кроме GetTopicAttributesAsyn c, чтобы проверить, если topi c существует?
  2. Есть ли способ использовать CreateTopicAsyn c, но не создавать topi c, если он еще не существует?
...