You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中使用@aws-sdk/client-sqs的sendMessage方法报错求助

问题根源

你的错误本质是本地SQS模拟服务(比如LocalStack/ElasticMQ)返回了纯文本的内部错误响应(There was an internal server error.),但AWS SDK v3的SQS客户端默认期望JSON格式的响应,所以在调用JSON.parse()时抛出了语法错误。这不是你的业务代码问题,而是服务端或客户端配置不匹配导致的。

排查与解决步骤

1. 确认本地SQS服务是否正常运行

用curl直接访问队列URL,检查服务是否响应:

curl http://localhost:9324/queue/jobQueue

如果返回非JSON内容或者报错,说明服务本身未正常启动,先重启本地SQS服务。

2. 确保目标队列已正确创建

很多时候内部错误是因为队列不存在,用AWS CLI(或SDK)创建队列:

aws sqs create-queue --queue-name jobQueue --endpoint-url http://localhost:9324

或者在代码里先调用createQueue接口确保队列存在(仅开发环境)。

3. 修正SQS客户端配置

本地SQS模拟服务需要明确指定endpoint、region和测试用的凭证,否则可能导致协议不兼容:

import { SQS } from "@aws-sdk/client-sqs";

// 初始化客户端时补充完整配置
const sqsClient = new SQS({
  region: "us-east-1", // 必须指定,即使是本地服务
  endpoint: "http://localhost:9324",
  credentials: {
    accessKeyId: "fakeAccessKey", // 测试用假凭证,本地服务不验证
    secretAccessKey: "fakeSecretKey"
  }
});

4. 检查本地SQS服务版本兼容性

部分旧版本的LocalStack/ElasticMQ对AWS SDK v3的JSON 1.0协议支持不完善,导致错误响应格式不对。尝试升级本地SQS服务到最新稳定版:

  • LocalStack:pip install --upgrade localstack
  • ElasticMQ:下载最新版本的jar包替换旧版本

5. 查看服务端日志定位具体错误

查看本地SQS服务的日志(比如LocalStack的localstack logs命令),找到返回内部错误的具体原因,比如队列权限配置错误、存储路径问题等,针对性修复。

验证方法

修复后重新调用enqueueMessage,如果控制台输出RESULT和消息ID,说明消息已成功入队。

内容的提问来源于stack exchange,提问作者n9dhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:12:44