使用 2 个 SQS 订阅向 SNS 主题发送消息,每个订阅都有一个 lambda 触发器导致空队列
Sending message to SNS topic with 2 SQS subscriptions each with a lambda trigger results in empty queues
到目前为止,我已经设置了一个 SNS 主题,其中包含 2 个 SQS 订阅。每个 SQS 都有一个与之关联的 lambda 触发器。
当我像这样通过 SNS.publish 发送消息以将消息发送到第二个 SQS 订阅时:
response = sns.publish(
TopicArn='arn:aws:sns:us-west-2:234723472:test',
Message=json.dumps({'default': json.dumps({"c": code, "event_type": queuename})}),
MessageAttributes={'event_type':{'DataType':'String', 'StringValue':queuename}
)
队列仍然是空的。
然而,当我直接向队列发送消息时,lambda 触发器起作用了。但是一旦发送到 SNS,消息似乎就不会过去。不会触发任何错误。令人沮丧的是 SNS 没有显示它收到的消息日志,所以我不能在这里真正调试东西。
我可能遗漏了什么?
我也尝试过使用和不使用上面的 MessageStructure='json'
,但没有任何区别。
不知道 AWS 中哪里发生了静默错误,这令人沮丧。
我遇到了同样的问题。请检查您是否在 SQS 上设置了权限,以便它可以接受来自 SNS 的消息。
示例:
# SQS Queue
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: MyQueue
# SNS Topic
MyTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: MyTopic
# Topic Subscription
MyTypicSubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: !GetAtt MyQueue.Arn
Protocol: sqs
RawMessageDelivery: true
TopicArn: !Ref MyTopic
#Permissions for SQS to receive SNS notifications
MyQueuePermissions:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Statement:
Effect: Allow
Principal:
AWS: '*'
Action: SQS:SendMessage
Resource:
- !GetAtt MyQueue.Arn
Condition:
ArnEquals:
aws:SourceArn: !Ref MyTopic
Queues:
- !Ref MyQueue
在控制台中它看起来像这样:
SNS 服务会通知其订阅者,但 "doesn't care" 订阅者是否可用,因此 SNS 上没有错误消息。
希望对您有所帮助!
到目前为止,我已经设置了一个 SNS 主题,其中包含 2 个 SQS 订阅。每个 SQS 都有一个与之关联的 lambda 触发器。
当我像这样通过 SNS.publish 发送消息以将消息发送到第二个 SQS 订阅时:
response = sns.publish(
TopicArn='arn:aws:sns:us-west-2:234723472:test',
Message=json.dumps({'default': json.dumps({"c": code, "event_type": queuename})}),
MessageAttributes={'event_type':{'DataType':'String', 'StringValue':queuename}
)
队列仍然是空的。
然而,当我直接向队列发送消息时,lambda 触发器起作用了。但是一旦发送到 SNS,消息似乎就不会过去。不会触发任何错误。令人沮丧的是 SNS 没有显示它收到的消息日志,所以我不能在这里真正调试东西。
我可能遗漏了什么?
我也尝试过使用和不使用上面的 MessageStructure='json'
,但没有任何区别。
不知道 AWS 中哪里发生了静默错误,这令人沮丧。
我遇到了同样的问题。请检查您是否在 SQS 上设置了权限,以便它可以接受来自 SNS 的消息。
示例:
# SQS Queue
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: MyQueue
# SNS Topic
MyTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: MyTopic
# Topic Subscription
MyTypicSubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: !GetAtt MyQueue.Arn
Protocol: sqs
RawMessageDelivery: true
TopicArn: !Ref MyTopic
#Permissions for SQS to receive SNS notifications
MyQueuePermissions:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Statement:
Effect: Allow
Principal:
AWS: '*'
Action: SQS:SendMessage
Resource:
- !GetAtt MyQueue.Arn
Condition:
ArnEquals:
aws:SourceArn: !Ref MyTopic
Queues:
- !Ref MyQueue
在控制台中它看起来像这样:
SNS 服务会通知其订阅者,但 "doesn't care" 订阅者是否可用,因此 SNS 上没有错误消息。 希望对您有所帮助!