我试着用:
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
你能帮我解决这个问题吗?
发布于 2022-02-08 20:06:08
您使用的是主题的ARN,而不是订阅的ARN。每个订阅也有一个ARN。例如,如果我创建一个名为generic-topic的主题,它的ARN如下所示:
arn:aws:sns:us-west-2:1234567890:generic-topic然后,当我创建订阅(在本例中是SQS队列)时,订阅ARN如下所示:
arn:aws:sns:us-west-2:1234567890:generic-topic:dc1580a7-1234-4b3d-12340-abcd12345678如果您正在使用CLI,您可以看到主题的订阅内容如下:
aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-west-2:1234567890:generic-topic以获得如下的输出:
{
"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"
}
]
}发布于 2022-02-09 21:43:11
为了解决我的问题,我只需要得到这样的假名Id:
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;
}然后,您可以这样调用此方法:
retornaSubscriptionArnSNS("arn:aws:sns:us-east-1:9999999999:myTopic");如果存在有订阅的主题,则将打印:
我找到了我的主题::arn:aws:sns:us-east-1:9999999999:myTopic:3e32b1c0-d3b7-40a6-8000-99220be49445
其他:
没有发现任何订阅
我希望这个代码能对你有用!
https://stackoverflow.com/questions/71039880
复制相似问题