2016-04-07 19 views
5

Tôi bắt đầu làm việc với AWS SNS để gửi thông báo đẩy tới ứng dụng của tôi. Hôm nay, để có được một chủ đề mà tôi muốn gửi thông báo đẩy đến, tôi cần tải tất cả các chủ đề - sử dụng chức năng listTopics() - và kiểm tra từng chủ đề để xem ARN có tên của chủ đề mà tôi đang tìm kiếm hay không cho.AWS SNS lấy chủ đề theo tên

Tôi nghĩ rằng đó là một cách rất không hiệu quả để có được một chủ đề ARN, và tôi muốn biết nếu có một cách hiệu quả nhất để có được thông tin này, như một hàm getTopicByName hay cái gì khác.

Nếu không, tôi muốn biết ARN có thay đổi hay không và liệu tôi có thể lưu trữ ARN chủ đề trên cơ sở dữ liệu của mình không?

Cảm ơn.

Trả lời

4

Tôi không biết cách nào để tìm kiếm chủ đề SNS theo tên.

ARN không thay đổi. Nó sẽ không thay đổi cho cuộc sống của chủ đề SNS. Đặc biệt, theo the documentation một ARN cho một chủ đề SNS là trong các định dạng sau:

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

Vì vậy, cách duy nhất để ARN chủ đề của SNS thay đổi sẽ được đổi tên (trong trường hợp tra cứu của bạn mà theo tên cũng sẽ phá vỡ), hoặc xóa chủ đề và tạo lại nó trong một khu vực mới hoặc trong một tài khoản hoàn toàn khác, trong trường hợp đó nó sẽ không thực sự cùng một chủ đề nữa.

+0

Cảm ơn người đàn ông, về nghi ngờ cuối cùng, quy tắc này của ARN làm việc cho bất kỳ ARN (chủ đề, thiết bị đầu cuối, ứng dụng, vv)? – GodFather

+0

Có, họ không nên thay đổi –

7

Nếu bạn biết chủ đề đã tồn tại hoặc bạn không quan tâm nếu nó được tạo ra, thì cách tiếp cận trực tiếp hơn nhiều chỉ đơn giản là gọi CreateTopic. Với tên, CreateTopic sẽ trả về chủ đề hiện tại, bao gồm ARN.

3

Nếu chủ đề đã có sẵn, bạn có thể sử dụng phương pháp "createTopic" như sau. Với điều này nếu người yêu cầu đã sở hữu chủ đề có tên được chỉ định, ARN của chủ đề đó sẽ được trả về mà không tạo chủ đề mới. Trong SDK Java AWS, mã sẽ trông như thế này.

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

Sau đó, bằng cách sử dụng CreateTopicResult bạn có thể lấy các ARN Topic và công bố thông điệp

sns.publish(new PublishRequest(createRes.getTopicArn(), "Hello World")); 
Các vấn đề liên quan