Amazon web services AWS SQS是否可以发布到SNS,或者是否需要轮询SQS?

Amazon web services AWS SQS是否可以发布到SNS,或者是否需要轮询SQS?,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我们目前正在使用AWS构建一个应用程序,需要将MSG推进SQS。我的问题是,是否有可能让SQS向SNS发布消息,从而触发Lambda(向SNS订阅)?然后,lambda需要向SQS返回一个确认,确认它收到了消息,从而从SQS中删除该消息 上述情景是否可能?还是从SQS获取消息、通过Lambda轮询队列等的唯一方法 提前感谢您提供的任何帮助 很抱歉误用了术语,但我对AWS比较陌生 SQS无法向SNS发布消息。SQS只能存储消息。您必须使用SQSAPI提取消息 希望这对你有帮助 SQS不支持推送。但

我们目前正在使用AWS构建一个应用程序,需要将MSG推进SQS。我的问题是,是否有可能让SQS向SNS发布消息,从而触发Lambda(向SNS订阅)?然后,lambda需要向SQS返回一个确认,确认它收到了消息,从而从SQS中删除该消息

上述情景是否可能?还是从SQS获取消息、通过Lambda轮询队列等的唯一方法

提前感谢您提供的任何帮助


很抱歉误用了术语,但我对AWS比较陌生

SQS无法向SNS发布消息。SQS只能存储消息。您必须使用SQSAPI提取消息


希望这对你有帮助

SQS不支持推送。但是,您可以设置一个lambda函数,该函数可以很容易地定期从SQS进行轮询,如下所述:

对于将来遇到此问题的任何人,我必须在使用SQS作为SNS->lambda服务的死信之后编写此脚本。这不是最漂亮的代码,但它很有效

以下是脚本,但您也可以在此处找到它:

sqs\u到sns.py

#用法
#$python sqs_to_sns.py我的队列名称
进口boto3
导入系统
导入队列
导入线程
从日期时间导入日期时间
导入json
从uuid导入uuid4
工作队列=队列。队列()
sqs=boto3.resource('sqs')
sns=boto3.客户端(“sns”)
sqs_client=boto3.client(“sqs”)
from_q_name=sys.argv[1]
打印(((“发件人:”+发件人姓名+“收件人:SNS”))
from_q=sqs。通过_名称获取_队列(QueueName=from_q_名称)
to_q=sqs。通过_名称获取_队列(QueueName='backup-queue')
跳过=0
已处理=0
总数=0
def process_queue():
尽管如此:
messages=work\u queue.get()
全球总数
总计=len(消息)
对于消息中的消息:
message_content=json.loads(message.body)
message.delete()
打印(“将邮件备份到死信队列-以防万一。Id:”+
消息内容['MessageId'])
bodies=列表()
追加({'Id':str(uuid4()),'MessageBody':message.body})
发送消息(条目=正文)
响应=sns.publish(
TopicArn=消息内容['TopicArn'],消息=消息内容['message'])
打印((“发布到主题的消息”+str(消息内容['MessageId']))+
“.To TopicArn:“+message_content['TopicArn']+”。收到的响应“+json.dumps(响应)))
全局处理
已处理=已处理+1
对于范围(10)内的i:
t=线程。线程(目标=进程队列)
t、 daemon=True
t、 开始()
尽管如此:
消息=列表()
对于来自\u q的消息,请接收\u消息(
MaxNumberOfMessages=10,
可视性超时=123,
WaitTimeSeconds=20):
messages.append(消息)
工作队列.放置(消息)
工作队列。加入()
打印“+str(总计)”中的“已处理”+str(已处理)+”+
“.Skipped”+str(Skipped)+“messages.Exiting”)