amazon-web-services - 使用boto3从sqs接收和删除消息

标签 amazon-web-services queue message boto3 amazon-sqs

我正在尝试一条一条地接收并删除该消息。这是我的代码供您引用。

def receive_delete(url , attr_names):
    global sqs
    response = sqs.receive_message(QueueUrl=url,
                               AttributeNames=attr_names,
                               MaxNumberOfMessages=10,
                               MessageAttributeNames=['All'])

    delete_msgs = []

    for messages in response['Messages']:

        delete_msgs.append({'Id':messages['MessageId'],
            'ReceiptHandle': messages['ReceiptHandle']})

        while len(delete_msgs) > 0:
            sqs.delete_message(QueueUrl=url , ReceiptHandle=['ReceiptHandle'])

然后我像这样调用该函数...

x = receive_delete("https://sqs.us-east-1.amazonaws.com/266638361021/tony.fifo", attr)

问题是,当我运行此方法时,它会卡住,当我检查亚马逊 sqs 仪表板时,它只显示一条消息被删除。

收到消息后如何一条一条删除?

最佳答案

这对我有用。 我从 FIFO 队列中读取一条消息(一条)并在中间进行处理,然后使用 receiptHandle 进行删除。这是代码 -

import boto3

queue = "your_queue_url"

def process_message():
    sqs_client = boto3.client("sqs")
    response = sqs_client.receive_message(
        QueueUrl=queue,
        MaxNumberOfMessages=1,
        WaitTimeSeconds=15,
    )
    # print(response)
    # print(response)

    print(f"Number of messages received: {len(response.get('Messages', []))}")

    message = response.get("Messages", [])[0]
    # print(message)
    message_body = message["Body"]
    receipt_handle = message['ReceiptHandle']
    print(f"Message body: {message_body}")
    print(f"Receipt Handle: {receipt_handle}")

    # trying to delete the message
    dlt_response = sqs_client.delete_message(
        QueueUrl=queue,
        ReceiptHandle=receipt_handle
        )

    print("Deleted? ", message_body)
    print(dlt_response['ResponseMetadata']['HTTPStatusCode'])

process_message()

希望这有帮助。

关于amazon-web-services - 使用boto3从sqs接收和删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54779716/

相关文章:

unix - 标准亚马逊 EC2 Linux 镜像基于哪种 Unix 风格?

用于无限数据输入(流)的python线程和队列

java - 当 java 中已存在电子邮件时,如何在 INBOX 文件夹的复制操作中跳过电子邮件?

amazon-web-services - CloudFormation 模板中不同 AWS Lambda 别名的环境变量配置

amazon-web-services - AWS 弹性 IP 网络 vpc 未连接到任何互联网网关

amazon-web-services - 在 S3 存储桶中如何正确配置要下载或读取的 json 格式的文件?

algorithm - Haskell 中的高效队列

python - 如何使用 celery 配置不同的工作池?

c# - 类(class);结构;枚举困惑,什么更好?

java - 与大量规则进行实时消息匹配