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

使用sqs-consumer监听SQS队列时出现this.sqs.send不是函数错误

问题排查:sqs-consumer 报错 SQSError: SQS receive message failed: this.sqs.send is not a function

我基于sqs-consumer库实现了SQS队列监听代码,单独的SQS消息接收代码可正常运行,但执行consumer.js时触发错误:SQSError: SQS receive message failed: this.sqs.send is not a function。当前环境为Node.js 18.19.0,依赖版本为aws-sdk ^2.1534.0、sqs-consumer ^8.1.3,相关代码及报错栈信息如下:

相关代码

const AWS = require("aws-sdk");
const { Consumer } = require("sqs-consumer");
require("dotenv").config({ path: "./../../.env" });

//aws configuration
AWS.config.update({
  secretAccessKey: "aws-secret-key",
  accessKeyId: "access-key",
  region: "us-east-1",
});

const sqs = new AWS.SQS({ apiVersion: "2012-11-05" });

const accountId = process.env.AWS_ACCOUNT_ID;
const sqsPath = process.env.SQS_PATH;
const queueName = process.env.EXPORTLOCATIONLIST_QUEUE_NAME;
const QueueUrl = `${sqsPath}/${accountId}/${queueName}`;


const subscribe = (QueueUrl, batchSpace, visibilityTimeout) => {
  const consumer = Consumer.create({
    queueUrl: QueueUrl,
    batchSize: batchSpace || 1,
    visibilityTimeout: visibilityTimeout || undefined,
    attributeNames: ["All"],
    handleMessage: async (message) => {
      console.log(message);
    },
    sqs: sqs,
  });

  
  consumer.start()

  return consumer
};

subscribe(QueueUrl);


module.exports = {
  subscribe,
};

报错信息

D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\errors.js:47
    const sqsError = new SQSError(message);
                     ^

SQSError: SQS receive message failed: this.sqs.send is not a function
    at toSQSError (D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\errors.js:47:22)
    at Consumer.receiveMessage (D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\consumer.js:190:43)      
    at Consumer.poll (D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\consumer.js:144:14)
    at Consumer.start (D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\consumer.js:62:18)
    at subscribe (D:\Samplify\runner_backend\task\src\listeners\queue_listener.js:32:12)
    at Object.<anonymous> (D:\Samplify\runner_backend\task\src\listeners\queue_listener.js:38:1)
    at Module._compile (node:internal/modules/cjs/loader:1356:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1414:10)
    at Module.load (node:internal/modules/cjs/loader:1197:32)
    at Module._load (node:internal/modules/cjs/loader:1013:12)
Emitted 'error' event on Consumer instance at:
    at Consumer.emit (D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\emitter.js:29:22)
    at Consumer.emitError (D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\consumer.js:120:18)
    at D:\Samplify\runner_backend\task\node_modules\sqs-consumer\dist\consumer.js:170:18
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  code: 'TypeError',
  statusCode: undefined,
  retryable: undefined,
  service: undefined,
  fault: undefined,
  time: 2024-01-15T07:44:44.810Z
}

错误原因

sqs-consumer v8.x版本起仅支持AWS SDK v3,而你当前使用的是AWS SDK v2,两者API结构不兼容:AWS SDK v2的SQS实例没有.send()方法(v2使用.receiveMessage()这类直接方法),但sqs-consumer v8.x内部调用的是v3的.send()接口,因此触发该错误。

解决方法

有两种可选方案:

方案1:降级sqs-consumer到兼容AWS SDK v2的版本

sqs-consumer v7.x及以下版本支持AWS SDK v2,修改package.json中的依赖版本:

"sqs-consumer": "^7.2.0"

然后重新安装依赖:

npm install

无需修改现有代码,保持AWS SDK v2的用法即可。

方案2:升级到AWS SDK v3

若要保留sqs-consumer v8.x,需切换到AWS SDK v3,修改代码如下:

const { SQSClient } = require("@aws-sdk/client-sqs");
const { Consumer } = require("sqs-consumer");
require("dotenv").config({ path: "./../../.env" });

// 初始化SQS Client(AWS SDK v3用法)
const sqs = new SQSClient({
  credentials: {
    secretAccessKey: "aws-secret-key",
    accessKeyId: "access-key",
  },
  region: "us-east-1",
});

const accountId = process.env.AWS_ACCOUNT_ID;
const sqsPath = process.env.SQS_PATH;
const queueName = process.env.EXPORTLOCATIONLIST_QUEUE_NAME;
const QueueUrl = `${sqsPath}/${accountId}/${queueName}`;

const subscribe = (QueueUrl, batchSpace, visibilityTimeout) => {
  const consumer = Consumer.create({
    queueUrl: QueueUrl,
    batchSize: batchSpace || 1,
    visibilityTimeout: visibilityTimeout || undefined,
    attributeNames: ["All"],
    handleMessage: async (message) => {
      console.log(message);
    },
    sqs: sqs, // 传入v3的SQSClient实例
  });

  consumer.start();
  return consumer;
};

subscribe(QueueUrl);

module.exports = {
  subscribe,
};

同时安装AWS SDK v3的SQS包:

npm install @aws-sdk/client-sqs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:57:23