要解决AWS SQS流不关闭的问题,您可以使用以下代码示例中的方法:
import boto3
def receive_messages(queue_url, max_number_of_messages):
sqs = boto3.client('sqs')
# 设置长轮询以保持SQS流活动
response = sqs.receive_message(
QueueUrl=queue_url,
MaxNumberOfMessages=max_number_of_messages,
WaitTimeSeconds=20
)
# 处理接收到的消息
for message in response.get('Messages', []):
# 处理消息的逻辑
print('Received message:', message['Body'])
# 删除处理完的消息
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=message['ReceiptHandle']
)
# 递归调用以保持流活动
receive_messages(queue_url, max_number_of_messages)
# 测试代码
queue_url = 'your_queue_url'
max_number_of_messages = 10
receive_messages(queue_url, max_number_of_messages)
上述代码使用Boto3库连接到AWS SQS,并使用receive_message
API接收消息。通过设置WaitTimeSeconds
参数为非零值,可以启用长轮询以保持流活动。
然后,代码处理接收到的消息,并使用delete_message
API删除已处理的消息。
最后,通过递归调用receive_messages
函数,使流保持活动状态,以继续接收和处理新的消息。
请注意,这只是解决问题的一种方法,您可以根据自己的需求对代码进行修改和优化。
下一篇:AWS SQS轮询