发送消息至AWS SQS FIFO队列后无法接收,请求排查问题
排查AWS SQS FIFO队列消息接收失败问题
问题描述
学习AWS SQS时,已向FIFO队列发送1条消息,但接收端Lambda函数无法获取到消息,执行日志显示无消息返回。
发送端Lambda代码
XURL=quote(URL) client = boto3.client('sqs') url_fifo = 'https://sqs.xxxxxx.com/xxxxxx/que.fifo' now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") response = client.send_message( QueueUrl=url_fifo, MessageBody=f'URL: {XURL}, EventTime: {now}', MessageDeduplicationId=str(time.time_ns()), MessageGroupId='Group1' )
接收端Lambda代码
name = 'que.fifo' sqs = boto3.resource('sqs') url_fifo = 'https://sqs.xxxxxx.amazonaws.com/xxxxxxx/que.fifo' queue = sqs.get_queue_by_name(QueueName=name) msg_list = queue.receive_messages(QueueUrl=url_fifo, MaxNumberOfMessages=1) print(msg_list) if msg_list: for message in msg_list: print(message.body) URL=message.body message.delete() else: print("no message")
执行日志
2023-02-07T13:47:50.326+09:00 [] 2023-02-07T13:47:50.326+09:00 no message
错误原因分析
- 队列URL不匹配:发送端使用的队列URL是
https://sqs.xxxxxx.com/xxxxxx/que.fifo,接收端使用的是https://sqs.xxxxxx.amazonaws.com/xxxxxxx/que.fifo,两者域名、账号ID部分均不一致,说明发送和接收操作的是两个不同队列,自然无法接收到消息。 - 接收端方法参数错误:使用
boto3.resource('sqs')获取队列对象后,调用receive_messages不需要传入QueueUrl参数——队列对象已经关联目标队列,额外传入该参数会导致逻辑冲突。
修复方案
方案1:统一队列URL并修正接收端参数
确保发送端和接收端使用完全一致的队列URL,同时移除receive_messages的QueueUrl参数:
name = 'que.fifo' sqs = boto3.resource('sqs') queue = sqs.get_queue_by_name(QueueName=name) # 移除多余的QueueUrl参数 msg_list = queue.receive_messages(MaxNumberOfMessages=1) print(msg_list) if msg_list: for message in msg_list: print(message.body) URL=message.body message.delete() else: print("no message")
方案2:改用boto3.client接收消息
若倾向客户端模式,可调整接收端代码如下:
sqs = boto3.client('sqs') # 使用与发送端一致的队列URL url_fifo = 'https://sqs.xxxxxx.com/xxxxxx/que.fifo' response = sqs.receive_message( QueueUrl=url_fifo, MaxNumberOfMessages=1 ) msg_list = response.get('Messages', []) print(msg_list) if msg_list: for message in msg_list: print(message['Body']) # 删除消息需传入ReceiptHandle sqs.delete_message( QueueUrl=url_fifo, ReceiptHandle=message['ReceiptHandle'] ) else: print("no message")
内容的提问来源于stack exchange,提问作者dlis168
相关产品推荐
相关产品推荐

