luc*_*fer 5 python messaging amazon-sqs boto3
我正在使用标准的 Amazon SQS 队列。在python3中使用boto3库与SQS交互。以下是我接收消息然后删除它们的代码:
from boto3.session import Session
boto3_session = Session(region_name=SQS_REGION_NAME, aws_access_key_id=SQS_ACCESS_ID,
aws_secret_access_key=SQS_ACCESS_KEY)
sqs = boto3_session.client('sqs')
response = sqs.receive_message(
MessageAttributeNames=[
'EventToReport',
],
QueueUrl=queue_url,
MaxNumberOfMessages=10,
VisibilityTimeout=0,
WaitTimeSeconds=0
)
messages = response['Messages']
receipt_handles = [{'Id': str(index), 'ReceiptHandle': msg['ReceiptHandle']} for index, msg in enumerate(messages)]
sqs.delete_message_batch(QueueUrl=queue_url, Entries=receipt_handles)
Run Code Online (Sandbox Code Playgroud)
这将返回一个成功响应:
{'Successful': [{'Id': '0'}, {'Id': '1'}, {'Id': '2'}, {'Id': '3'}, {'Id': '4'}, {'Id': '5'}, {'Id': '6'}, {'Id': '7'}, {'Id': '8'}, {'Id': '9'}], 'ResponseMetadata': {'RequestId': 'bb28855b-6522-5a1e-a649-d7b3fdabfebe', 'RetryAttempts': 0, 'HTTPStatusCode': 200, 'HTTPHeaders': {'content-length': '1008', 'connection': 'keep-alive', 'server': 'Server', 'date': 'Mon, 29 Jan 2018 03:34:33 GMT', 'content-type': 'text/xml', 'x-amzn-requestid': 'bb28855b-6522-5a1e-a649-d7b3fdabfebe'}}}
Run Code Online (Sandbox Code Playgroud)
但是当我查看我的 SQS 管理控制台时,我可以看到没有任何消息被删除!消息的可见性超时为 30 秒。
我将队列的可见性超时增加到 30 分钟,尽管响应相同,但现在只有 1 条消息被删除!
我知道完成删除需要时间,所以我每次都等了 2-3 分钟,但消息仍保留在队列中......我是否以错误的方式调用 API?据我所知,这是使用 boto3 调用 sqs api 的正确方法。
我终于发现我的代码有问题。虽然我在 sqs 控制台中描述了可见性超时,但我的 get 请求覆盖了它,所以我只是从代码中删除了以下两行receive_message:
VisibilityTimeout=0,
WaitTimeSeconds=0
Run Code Online (Sandbox Code Playgroud)
现在工作正常。
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |