2016-04-07 4 views
5

Я начал работать с AWS SNS для отправки push-уведомлений в свое приложение. Сегодня, чтобы получить тему, на которую я хочу отправить push-уведомления, мне нужно загрузить все темы - с помощью функции клиента SNS listTopics() - и проверить каждую тему, чтобы узнать, имеет ли ARN название темы, которую я ищу для.AWS SNS получить тему по названию

Я думаю, что это очень неэффективный способ получить тему ARN, и я хотел бы знать, есть ли наиболее эффективный способ получить эту информацию, например, функцию getTopicByName или что-то еще.

Если нет, я хотел бы знать, является ли ARN неизменным, и может ли я сохранить тему ARN в моей базе данных?

Спасибо.

ответ

4

Я не знаю, как искать тему SNS по имени.

ARN неизменен. Это не изменится для жизни темы SNS. В частности, в соответствии с the documentation ARN для темы SNS в следующем формате:

arn:aws:sns:region:account-id:topicname

Таким образом, единственный способ для ARN ОСН раздела изменить было бы изменить имя (в этом случае ваш поиск по имени также сломается), или удалите тему и воссоздайте ее в новом регионе или в совершенно другой учетной записи, и в этом случае это будет не совсем та же тема.

+0

Спасибо человека, в прошлом сомнения, это правило ARN работает для любого ARN (тема, конечная точка, приложение и т.д.)? – GodFather

+0

Да, они не должны меняться –

7

Если вы знаете, что тема уже существует, или вам все равно, будет ли она создана, то гораздо более прямой подход - просто позвонить CreateTopic. Учитывая имя, CreateTopic вернет существующую тему, включая ARN.

3

Если тема уже доступна, вы можете использовать метод «createTopic» следующим образом. С этим, если запрашивающий уже владеет темой с указанным именем, ARN этой темы возвращается без создания новой темы. В AWS Java SDK код будет выглядеть следующим образом.

AWSCredentialsProvider provider = new ProfileCredentialsProvider(); 
    AmazonSNS sns = AmazonSNSClientBuilder.standard().withCredentials(provider).build(); 
    CreateTopicResult createRes = sns.createTopic("HelloTopic"); 

Затем с помощью CreateTopicResult вы можете получить в тему ARN и опубликовать сообщение

sns.publish(new PublishRequest(createRes.getTopicArn(), "Hello World")); 
Смежные вопросы