python - 如何从 boto 中的 sns 取消订阅 sqs 队列

标签 python boto amazon-sqs amazon-sns

我有一个 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 队列对象。

最佳答案

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 的订阅。

关于python - 如何从 boto 中的 sns 取消订阅 sqs 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33687317/

相关文章:

python - Amazon S3 boto - 如何删除文件夹?

sql-server - Amazon SQS 是处理分析日志数据到数据库的好工具吗?

python - 在 jupyter 中使用 matplotlib 绘制非常小的值

ssl - 对 Amazon Trust Services 迁移的 boto 支持

python - 在 YUV 叠加上绘制透明矩形

python - 未指定端点 url 时,boto3 sqs 的 url 不正确

python - 在 Python 中快速插入大量 SQS 消息的最佳方法是什么?

java - 在网络级别上在 AWS 和 localstack 之间切换

python - 比较时如何默认获取Enum值?

python - 根据单元格区域重新排列 numpy 数组