Я использую 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;
}
Вопрос :
- Есть ли другой способ, кроме GetTopicAttributesAsyn c, чтобы проверить, если topi c существует?
- Есть ли способ использовать CreateTopicAsyn c, но не создавать topi c, если он еще не существует?