我有一个sqs队列,使用boto.sns.subscribe()方法订阅了一个sns主题。如何从主题中取消订阅队列?我尝试了下面的boto sns方法unsubscribe(订阅),但它给了我错误。
BotoServerError: BotoServerError: 400 Bad Request
{"Error":{"Code":"InvalidParameter","Message":"Invalid parameter: SubscriptionId","Type":"Sender"},"RequestId":"41db2d5b-5ab8-561a-9846-63e4d0c1e795"}
我试过的代码:
arn = str(self._sqs_connection_obj.get_queue_attributes(queue, attribute='QueueArn')['QueueArn'])
SNSHandler()._sns_connection_obj.unsubscribe(arn)
queue - 是我的sqs队列对象。
答案 0 :(得分:2)
SNS的unsubscribe()
方法采用订阅的ARN(而不是SQS队列的ARN)。
使用SNS get_all_subscriptions()
方法检索有关SNS订阅的信息,然后提取要删除的订阅者的ARN。
它看起来像:
'SubscriptionArn': 'arn:aws:sns:ap-southeast-2:743112987576:my-topic:5644ff1b-56df-486d-8317-e8889616aa7c'
以下是来自get_all_subscriptions()
电话的回复:
>>> import boto.sns
>>> import boto.sqs
>>> sns=boto.sns.connect_to_region('ap-southeast-2')
>>> sns.get_all_subscriptions()
{u'ListSubscriptionsResponse': {u'ListSubscriptionsResult': {u'NextToken': u'AAFZ4NK21b0q15BrHPHV9fYxNWD16pSk2A7dvMEIWe1LWQ==', u'Subscriptions': [{u'Owner': u'743112987576', u'Endpoint': u'arn:aws:sqs:ap-southeast-2:743112987576:stack-queue', u'Protocol': u'sqs', u'TopicArn': u'arn:aws:sns:ap-southeast-2:743112987576:my-topic', u'SubscriptionArn': u'arn:aws:sns:ap-southeast-2:743112987576:my-topic:5644ff1b-56df-486d-8317-e8889616aa7c'}]}, u'ResponseMetadata': {u'RequestId': u'641f5f6a-ea0f-51e7-929b-11a8c304fd62'}}}
因此,最好的选择是查看订阅列表,找到端点等于您的队列ARN的订阅。