Pregunta AWS SNS obtener tema por nombre


Empecé a trabajar con AWS SNS para enviar notificaciones automáticas a mi aplicación. Hoy en día, para obtener un tema al que deseo enviar notificaciones de inserción, debo cargar todos los temas (usando la función de lista de servicios SNS clientTopics) y comprobar cada tema para ver si el ARN tiene el nombre del tema que estoy buscando. para.

Creo que es una forma muy ineficiente de obtener un tema ARN, y me gustaría saber si hay una manera más eficiente de obtener esta información, como una función getTopicByName u otra cosa.

Si no, me gustaría saber si ARN es inmutable, y si puedo almacenar el tema ARN en mi base de datos.

Gracias.


5
2018-04-07 21:30


origen


Respuestas:


No conozco ninguna forma de buscar un tema SNS por nombre.

El ARN es inmutable. No cambiará durante la vida del tema SNS. En particular, de acuerdo con la documentación un ARN para un tema SNS está en el siguiente formato:

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

Por lo tanto, la única forma de que el ARN del tema de SNS cambie es cambiar el nombre (en cuyo caso, también se interrumpirá su búsqueda por nombre), o eliminar el tema y volver a crearlo en una nueva región o en una cuenta completamente diferente, en la que caso ya no sería el mismo tema.


4
2018-04-07 21:41



Si sabe que el tema ya existe o no le importa si se crea, entonces un enfoque mucho más directo es simplemente llamar CreateTopic. Dado un nombre, CreateTopic devolverá el tema existente, incluido el ARN.


8
2018-06-28 23:44



Si el tema ya está disponible, puede usar el método "createTopic" de la siguiente manera. Con esto, si el solicitante ya posee un tema con el nombre especificado, el ARN de ese tema se devuelve sin crear un tema nuevo. En AWS Java SDK, el código se verá así.

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

Luego, al usar CreateTopicResult puede obtener el Tema ARN y publicar el mensaje

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

3
2018-05-05 15:47