Я начал работать с AWS SNS для отправки push-уведомлений в мое приложение. Сегодня, чтобы получить тему, на которую я хочу отправить push-уведомления, мне нужно загрузить все темы – с помощью функции клиента SNS listTopics () – и проверить каждую тему, чтобы узнать, имеет ли ARN название темы, которую я ищу для.
Я думаю, что это очень неэффективный способ получить тему ARN, и я хотел бы знать, есть ли наиболее эффективный способ получить эту информацию, например функцию getTopicByName или что-то еще.
Если нет, я хотел бы знать, является ли ARN неизменным, и может ли я сохранить тему ARN в моей базе данных?
Благодарю.
Я не знаю, как искать тему SNS по имени.
ARN неизменен. Это не изменится для жизни темы SNS. В частности, согласно документации ARN для темы SNS имеет следующий формат:
arn:aws:sns:region:account-id:topicname
Таким образом, единственный способ изменения ARN в SNS-теме – изменить имя (в этом случае ваш поиск по имени будет также нарушен) или удалить тему и воссоздать ее в новом регионе или в совершенно другой учетной записи, в которой Дело в том, что на самом деле это будет не так.
Если вы знаете, что тема уже существует, гораздо более прямой подход – просто вызвать CreateTopic
. Учитывая имя, CreateTopic
вернет существующую тему, включая ARN.
Если тема уже доступна, вы можете использовать метод «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"));