AWS SNS按名称获取主题

时间:2016-04-07 21:30:44

标签: php amazon-web-services aws-sdk

我开始使用AWS SNS向我的应用发送推送通知。今天,为了获得我想要发送推送通知的主题,我需要加载所有主题 - 使用SNS客户端函数listTopics() - 并检查每个主题以查看ARN是否具有我正在查找的主题的名称对于。

我认为这是获取主题ARN的一种非常低效的方式,我想知道是否有一种最有效的方法来获取此信息,例如函数getTopicByName或其他东西。

如果没有,我想知道ARN是否是不可变的,我是否可以将ARN主题存储在我的数据库中?

感谢。

3 个答案:

答案 0 :(得分:11)

如果您知道该主题已经存在,或者您不关心它是否已创建,那么更直接的方法就是调用CreateTopic。给定名称,CreateTopic将返回现有主题,包括ARN。

答案 1 :(得分:6)

如果主题已经可用,那么您可以使用“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"));

答案 2 :(得分:5)

我不知道如何以名义查找SNS主题。

ARN是不可变的。它不会在SNS主题的生命周期中发生变化。特别是,根据the documentation,SNS主题的ARN采用以下格式:

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

因此,SNS主题的ARN更改的唯一方法是更改​​名称(在这种情况下,您的名称查找也会中断),或者删除主题并在新区域或其中重新创建一个完全不同的帐户,在这种情况下,它不再是真正相同的主题。

相关问题