AWS SQS的MessageGroupId可以确保同一组消息被同一个Lambda处理。具体做法是在发送SQS消息时,指定相同的MessageGroupId,并设置VisibilityTimeout和WaitTimeSeconds的合理值。
以下是Python代码示例:
import boto3
sqs = boto3.client('sqs')
queue_url = 'your_queue_url'
# 发送消息到SQS
response = sqs.send_message(
QueueUrl=queue_url,
MessageBody='Test message',
MessageGroupId='TestGroup',
VisibilityTimeout=3600,
WaitTimeSeconds=0
)
# 接收消息并处理
response = sqs.receive_message(
QueueUrl=queue_url,
WaitTimeSeconds=20,
VisibilityTimeout=3600,
MaxNumberOfMessages=1
)
if 'Messages' in response:
message = response['Messages'][0]
print('Processing message:', message['MessageId'], message['Body'])
# 处理消息
sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=message['ReceiptHandle'])
else:
print('No message received')