首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么snsClient.unsubscribe(请求)在snsClient.unsubscribe(请求)上给了我一个错误?

为什么snsClient.unsubscribe(请求)在snsClient.unsubscribe(请求)上给了我一个错误?
EN

Stack Overflow用户
提问于 2022-02-08 19:35:36
回答 2查看 117关注 0票数 0

我试着用:

代码语言:javascript
复制
  UnsubscribeRequest request = UnsubscribeRequest.builder()
                .subscriptionArn("arn:aws:sns:us-east-1:9999999999:myTopic")
                .build();

  UnsubscribeResponse result = snsClient.unsubscribe(request);

但我收到了一个错误:

software.amazon.awssdk.services.sns.model.InvalidParameterException:无效参数: SubscriptionId (服务: Sns,状态代码: 400,请求ID: 08d4fa07-be89-5b3d-bd81-a07bcf09de7a,扩展请求ID: null)在software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:123) ~sdk-core-2.17.46.jar:na

你能帮我解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2022-02-08 20:06:08

您使用的是主题的ARN,而不是订阅的ARN。每个订阅也有一个ARN。例如,如果我创建一个名为generic-topic的主题,它的ARN如下所示:

代码语言:javascript
复制
arn:aws:sns:us-west-2:1234567890:generic-topic

然后,当我创建订阅(在本例中是SQS队列)时,订阅ARN如下所示:

代码语言:javascript
复制
arn:aws:sns:us-west-2:1234567890:generic-topic:dc1580a7-1234-4b3d-12340-abcd12345678

如果您正在使用CLI,您可以看到主题的订阅内容如下:

代码语言:javascript
复制
aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-west-2:1234567890:generic-topic

以获得如下的输出:

代码语言:javascript
复制
{
    "Subscriptions": [
        {
            "SubscriptionArn": "arn:aws:sns:us-west-2:1234567890:generic-topic:dc1580a7-1234-4b3d-12340-abcd12345678",
            "Owner": "1234567890",
            "Protocol": "sqs",
            "Endpoint": "arn:aws:sqs:us-west-2:1234567890:generic-queue",
            "TopicArn": "arn:aws:sns:us-west-2:1234567890:generic-topic"
        }
    ]
}
票数 1
EN

Stack Overflow用户

发布于 2022-02-09 21:43:11

为了解决我的问题,我只需要得到这样的假名Id:

代码语言:javascript
复制
public String retornaSubscriptionArnSNS(String arnSns)  {
    
    String resultado = "";
    
    try {
        ListSubscriptionsRequest request = ListSubscriptionsRequest.builder()
                .build();

        ListSubscriptionsResponse result = snsClient.listSubscriptions(request);
        
        int intSize = result.subscriptions().size(); 
        
        if (intSize > 0) {
            
            for (int i = 0; i < intSize-1; i++) {
                
                if (result.subscriptions().get(0).topicArn().equals(arnSns)) {
                    
                    resultado = result.subscriptions().get(i).subscriptionArn();
                    System.out.println("I found my topic: "+resultado);
                    break; 
                }
                
            }  

            
        } else {
            System.out.println("No one subscription found");
        }

        if (resultado == "") {
            System.out.println("Topic not found");
        }
        
        
    } catch (SnsException e) {

        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return resultado;
    
}

然后,您可以这样调用此方法:

代码语言:javascript
复制
    retornaSubscriptionArnSNS("arn:aws:sns:us-east-1:9999999999:myTopic");

如果存在有订阅的主题,则将打印:

我找到了我的主题::arn:aws:sns:us-east-1:9999999999:myTopic:3e32b1c0-d3b7-40a6-8000-99220be49445

其他:

没有发现任何订阅

我希望这个代码能对你有用!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71039880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档