aws sns发布未到达端点

时间:2018-02-23 01:05:01

标签: amazon-web-services publish-subscribe boto3 amazon-sqs amazon-sns

我正在开发一个使用SNS和SQS在boto3实体之间发布主题的应用。该设置非常普遍,其中一个进程已订阅该主题并正在等待活动。第二个过程就是向主题发布消息,我希望看到已发布的消息到达收听作业,但一切都没有。 SQS仪表板显示没有待处理或待命的消息。队列和主题都有完全权限。我是所有这一切的新手,所以它可能很简单。

听力工作:

# Create topic
sns_game_topic = sns_client.create_topic(Name='My_Topic')

# Create queue
queue = sqs_client.create_queue(QueueName='My_Queue.fifo', Attributes={'FifoQueue':'true', 'ContentBasedDeduplication': 'true'})
sqs_arn = sqs_client.get_queue_attributes(QueueUrl=queue['QueueUrl'], AttributeNames=['QueueArn'])['Attributes']['QueueArn']

sns_arn = sns_topic['TopicArn']

sns_client.subscribe(TopicArn=sns_arn, Protocol='sqs', Endpoint=sqs_arn)

发送工作:

queue = self.sqs_client.create_queue(QueueName='Battleship_Registration.fifo', Attributes={'FifoQueue':'true', 'ContentBasedDeduplication': 'true'})

sqs_arn = self.sqs_client.get_queue_attributes(QueueUrl=queue['QueueUrl'], AttributeNames=['QueueArn'])['Attributes']['QueueArn']

# This topic should already exist but creation is idempotent and we need the arn to subscribe to it
topic = self.sns_client.create_topic(Name='My_Topic') 
sns_arn = topic['TopicArn']

# Connect topic to queue
self.sns_client.subscribe(TopicArn=sns_arn, Protocol='sqs', Endpoint=sqs_arn)
pub = self.sns_client.publish(TopicArn=<SNS ARN goes here>, Message='Hello World')

由于我希望所有邮件都通过,因此没有激活过滤器策略。

我有两个问题: 为什么简单的发布没有通过?

为了发布或订阅,我需要知道sns和sqs的arn值。我知道获取它们的最佳方法是调用create_(topic / queue),即使实体已经存在。这些调用是幂等的,所以它应该是安全的,但这是获得arn值的最佳实践吗?

1 个答案:

答案 0 :(得分:1)

发现问题。 SNS不适用于FIFO队列。订阅行为不起作用,因此主题和队列之间从未存在过连接。

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-subscribe-queue-sns-topic.html

  

请注意

     

Amazon SNS目前不兼容FIFO队列。