【问题标题】:What is the proper parsing for SQS receive_message?SQS 接收消息的正确解析是什么?
【发布时间】:2022-01-23 07:42:18
【问题描述】:

这几天我一直在解决这个问题,但我似乎不知道该去哪里 解决这个错误。我已经根据 Boto3、SQS 文档和 Lambda 测试中记录的内容对 receive_message 响应语法进行了测试,但无济于事。

{
      "errorMessage": "'Messages'",
      "errorType": "KeyError",
      "stackTrace": [
        "  File \"/var/task/lambda_function.py\", line 24, in lambda_handler\n    message = response['Messages'][0]\n"
      ]
 }

我直接从Boto3 SDK documentation拿了这个Python sn-p:

import boto3
import os

# Create SQS client
sqs = boto3.client('sqs')

QUEUE_URL = os.environ['QUEUE_URL']

def lambda_handler(event, context):
    # Receive message from SQS queue
    response = sqs.receive_message(
        QueueUrl=QUEUE_URL,
        AttributeNames=[
            'SentTimestamp'
        ],
        MaxNumberOfMessages=10,
        MessageAttributeNames=[
            'All'
        ],
        VisibilityTimeout=0,
        WaitTimeSeconds=0
    )
    
    message = response['Messages'][0]
    receipt_handle = message['ReceiptHandle']
    
    # Delete received message from queue
    sqs.delete_message(
        QueueUrl=queue_url,
        ReceiptHandle=receipt_handle
    )
    print('Received and deleted message: %s' % message)

【问题讨论】:

  • 您是从 SQS 触发 AWS Lambda 函数,还是每隔一段时间手动运行 Lambda 函数?
  • 是的,我在函数的配置中设置了SQS触发器。

标签: python amazon-web-services boto3 amazon-sqs


【解决方案1】:

如果您已将 Amazon SQS 配置为触发 AWS Lambda 函数,则您无需调用任何 SQS 命令。相反,消息在传递给 Lambda 函数的event 中提供:

for record in event['Records']:
    payload = record['body']
    print(payload)

如果 Lambda 函数成功退出,则消息将自动从队列中删除。

见:Using Lambda with Amazon SQS - AWS Lambda

【讨论】:

  • 这完全有道理!就像 S3 事件触发器一样。我现在就给它开枪。
猜你喜欢
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2019-11-11
  • 2020-03-04
  • 2022-07-19
  • 1970-01-01
相关资源
最近更新 更多