AWS SNS按名称获取主题

God*_*her 7 php amazon-web-services aws-sdk

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

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

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

谢谢.

sig*_*ned 11

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


小智 6

如果主题已经可用,那么您可以使用"createTopic"方法,如下所示.如果请求者已经拥有具有指定名称的主题,则返回该主题的ARN而不创建新主题.在AWS Java SDK中,代码将如下所示.

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

然后,通过使用CreateTopicResult,您可以获取主题ARN并发布消息

sns.publish(new PublishRequest(createRes.getTopicArn(), "Hello World"));
Run Code Online (Sandbox Code Playgroud)


Mar*_*k B 5

我不知道如何通过名称查找SNS主题.

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

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

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