2016-04-07 6 views
5

Ich begann mit AWS SNS zu arbeiten, um Push-Benachrichtigungen an meine App zu senden. Um ein Thema zu erhalten, an das ich Push-Benachrichtigungen senden möchte, muss ich heute alle Themen laden - mit der SNS-Client-Funktion listTopics() - und jedes Thema prüfen, um zu sehen, ob der ARN den Namen des gesuchten Themas hat zum.AWS SNS Abrufen des Themas nach Name

Ich denke, dass es eine sehr ineffiziente Möglichkeit ist, ein Thema ARN zu bekommen, und ich würde gerne wissen, ob es eine möglichst effiziente Möglichkeit gibt, diese Informationen zu erhalten, wie eine Funktion getTopicByName oder etwas anderes.

Wenn nicht, würde ich gerne wissen, ob ARN unveränderlich ist, und ob ich das Thema ARN in meiner Datenbank speichern kann?

Danke.

Antwort

4

Ich kenne keine Möglichkeit, ein SNS-Thema namentlich nachzuschlagen.

Die ARN ist unveränderlich. Es wird sich für das Leben des SNS-Themas nicht ändern. Insbesondere nach the documentation ein ARN für ein SNS Thema finden Sie im folgenden Format:

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

So ist die einzige Art und Weise für die ARN des SNS Thema wäre zu ändern den Namen zu ändern (in diesem Fall Ihre Lookup beim Namen würde auch brechen), oder löschen Sie das Thema und erstellen Sie es in einer neuen Region oder in einem völlig anderen Konto, in welchem ​​Fall es nicht wirklich das gleiche Thema mehr wäre.

+0

Dank Mann, auf den letzten Zweifel, diese Regel von arn arbeitet für jeden arn (Thema, Endpunkt, Anwendung, etc.) – GodFather

+0

Ja, sie sollten sich nicht ändern –

7

Wenn Sie wissen, dass das Thema bereits existiert oder es nicht wichtig ist, ob es erstellt wird, dann ist ein direkterer Weg, einfach CreateTopic aufzurufen. Bei gegebenem Namen gibt CreateTopic das vorhandene Thema zurück, einschließlich des ARN.

3

Wenn das Thema bereits verfügbar ist, können Sie die Methode "createTopic" wie folgt verwenden. Wenn der Anforderer bereits ein Thema mit dem angegebenen Namen besitzt, wird die ARN dieses Themas zurückgegeben, ohne ein neues Thema zu erstellen. Im AWS Java SDK sieht der Code wie folgt aus.

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

dann von CreateTopicResult verwenden Sie das Thema ARN erhalten und veröffentlichen die Nachricht

sns.publish(new PublishRequest(createRes.getTopicArn(), "Hello World")); 
Verwandte Themen