簡體   English   中英

如何在 Java 中為 SQS 隊列訂閱 SNS 主題

[英]How to subscribe a SQS queue to a SNS topic in Java

當我創建一個新隊列並將其訂閱到 Java 主題時,沒有消息出現。 同樣通過 AWS Web 控制台工作正常。

我想我必須以某種方式確認訂閱,但是sns.confirmSubscription方法需要一個令牌——我應該從哪里得到它?

這是我的Java代碼:

String queueURL = sqs.createQueue("my-queue").getQueueUrl();

sns.subscribe(myTopicARN, "sqs", queueURL);

sns.publish(myTopicARN, "{\"payload\":\"test\"}");

sqs.receiveMessage(queueURL).getMessages()
        .forEach(System.out::println);  // nothing

我究竟做錯了什么?

看看這個: https : //aws.amazon.com/blogs/developer/subscribing-queues-to-topics/

你應該像這樣訂閱:

Topics.subscribeQueue(sns, sqs, myTopicARN, queueURL);

這種方便的方法為訂閱創建了一個策略,以允許主題向隊列發送消息。

將隊列訂閱到 sns 不會自動創建允許 sns 將消息發送到隊列的策略(根據我使用 sns/sqs 的經驗),因此您需要自己創建策略並授予 sns 將消息發送到您的隊列的權限是關於如何使用隊列 url 、隊列 arn 和主題 arn 進行操作的示例

import static com.amazonaws.auth.policy.Principal.All;
import static com.amazonaws.auth.policy.Statement.Effect.Allow;
import static com.amazonaws.auth.policy.actions.SQSActions.SendMessage;
import static com.amazonaws.auth.policy.conditions.ArnCondition.ArnComparisonType.ArnEquals;

final Statement mainQueueStatements = new Statement(Allow) //imported above
        .withActions(SendMessage) //imported above
            .withPrincipals(All) //imported above
            .withResources(new Resource(queueArn)) // your queue arn
            .withConditions(
                    new Condition()
                            .withType(ArnEquals.name()) //imported above
                            .withConditionKey(SOURCE_ARN_CONDITION_KEY) //imported above
                            .withValues(topicArn) // your topic arn
            );
    final Policy mainQueuePolicy = ()
            .withId("MainQueuePolicy")
            .withStatements(mainQueueStatements);
    final HashMap<QueueAttributeName, String> attributes = new HashMap<>();
     attributes.put(QueueAttributeName.Policy.toString(), mainQueuePolicy.toJson());
    amazonSQS.setQueueAttributes(new SetQueueAttributesRequest().withAttributes(attributes).withQueueUrl(queueUrl)); // your queue url

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM