Laravel邮件附件发送异常:大附件触发SQS报错求助
错误原因
你遇到的InvalidParameterValue错误,根源是AWS SQS的单条消息大小限制,和你修改的PHP post_max_size、upload_max_filesize配置无关。AWS SQS的标准队列与FIFO队列,单条消息的最大允许大小都是256KB(即262144字节),当你发送的邮件附件相关数据(包含在SQS消息内)超过这个阈值时,就会触发该报错。
可行解决方案
- 消息分段处理:将超过256KB的消息拆分为多个小于阈值的分段,分别发送至SQS队列。消费者端需要接收所有分段后,通过预设的标识和序号重组完整消息。
- 结合S3存储大内容:把大附件或完整消息内容上传至AWS S3存储桶,仅将S3对象的URL/存储路径作为消息内容发送到SQS。消费者从SQS获取路径后,再去S3读取对应文件,这是处理大内容最常用的方式。
- 压缩冗余内容:检查SQS消息中是否包含冗余数据,对JSON、文本等可压缩内容进行Gzip压缩后再发送,能有效缩小消息体积。
原始问题描述
在应用中使用通信服务处理所有消息发送,当发送附件大小超过100KB的邮件时,触发了SQS异常,无法明确报错原因。已修改CLI与Apache的php.ini配置:post_max_size = 20M、upload_max_filesize = 20M。
异常详情
Mail-Exception: ["[object] (Aws\Sqs\Exception\SqsException(code: 0): Error executing "SendMessage" on "https://sqs.ap-south-1.amazonaws.com/**/dev-"; AWS HTTP error: Client error:
POST https://sqs.ap-south-1.amazonaws.com/******/dev-****resulted in a400 Bad Requestresponse:SenderI (truncated...)
InvalidParameterValue (client): One or more parameters are invalid. Reason: Message must be shorter than 262144 bytes.
内容的提问来源于stack exchange,提问作者Masood Khan

