AWS SQS Python SDK

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
CRUD Create, Read, Update, Delete 创建、读取、更新、删除
JSON JavaScript Object Notation 一种结构化数据格式
SQS Simple Queue Service AWS 消息队列服务

1. Dependency#

python3 -m pip install boto3

2. What CRUD Means In SQS#

queue CRUD:
    create:
        create_queue
    read:
        get_queue_url / get_queue_attributes
    update:
        set_queue_attributes
    delete:
        delete_queue

message CRUD:
    create:
        send_message
    read:
        receive_message
    update:
        SQS does not support in-place message body update
        usually re-send a new message or change visibility timeout
    delete:
        delete_message

3. 安全运行方式#

下载 lab.py。它提供 create / inspect / cleanup 三个独立入口;随机运行标识、沙箱标签及本地清单绑定资源,默认不删除任何消息或队列。

export AWS_REGION=ap-east-1
export EXPECTED_ACCOUNT_ID=REPLACE_SANDBOX_ACCOUNT_ID
python3 lab.py create
python3 lab.py inspect

创建步骤要求沙箱角色仅可管理 docs-* 队列,允许所需 SQS 操作及标签 API;使用 SSO/短期角色,不保存 access key。清单不是秘密,但不能修改它指向其他资源。部分创建失败时保留清单,先检查实际资源;不要直接重建同名队列。

4. 消息处理的提交边界#

# sqs 为 boto3 SQS client;process_and_commit 为真实业务的持久化事务。
# 同一 request_id + 相同内容重复到达,应复用结果;不同内容必须拒绝。
def handle(sqs, queue_url, message, process_and_commit):
    import json
    payload = json.loads(message["Body"])
    if payload.get("schema_version") != 1 or not payload.get("request_id"):
        raise ValueError("Invalid message contract; do not ACK")
    process_and_commit(payload)  # 返回前必须完成数据库提交,不可用 sleep 代替。
    sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=message["ReceiptHandle"])

ACK(Acknowledgement,消息确认)只在提交后执行;提交后进程崩溃会再次投递,因此幂等记录必须与业务修改同事务。外部支付使用支付方幂等键与对账,不宣称一次投递。处理时间超过可见性窗口时须续租;续租失败停止新的副作用,允许消息重投。

可运行的数据库事务、worker 崩溃重试与对账见 订单参考工程。该工程使用 PostgreSQL 事务队列;上面是 SQS 适配接口,不能把两种队列的配置混用。

5. 独立清理#

完成 Hands-on 的死信重驱和验收,停止生产者/消费者后才运行:

python3 lab.py cleanup --confirm-run "$(jq -r .run sqs-run.json)"

脚本先检查全部队列的账号、区域、名称及归属标签,再删除本次源队列、死信和 FIFO 队列。不会 purge 共享队列。生产队列不使用此实验清理工具。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭