【问题标题】:How to unsubscribe sqs queue from sns in boto如何从boto中的sns取消订阅sqs队列
【发布时间】:2015-11-15 14:35:07
【问题描述】:

我有一个 sqs 队列,它使用 boto.sns.subscribe() 方法订阅了一个 sns 主题。我应该怎么做才能从主题中取消订阅队列?我尝试了如下的 boto sns 方法取消订阅(订阅),但它给了我错误。

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 队列对象。

【问题讨论】:

    标签: python boto amazon-sqs amazon-sns


    【解决方案1】:

    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'}}}
    

    因此,最好的选择是查看订阅列表,找到 Endpoint 等于您的队列 ARN 的订阅。

    【讨论】:

    • 感谢您的回复。如果我有队列对象,如何从get_all_subscription() 中提取订阅者 ARN?
    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多