多Node.js SQS消费者仅单条消息处理问题排查与解决
问题:多进程SQS消费者仅处理单条消息的原因排查与解决
我有一个存储数千条消息的SQS队列,因使用Puppeteer导致函数体积过大无法在Lambda中消费,故将消费者迁移至EC2实例。作为POC,我基于sqs-consumer库实现了基础消费者,并通过pm2启动多个相同进程,代码实现如下:
import { SQSClient } from '@aws-sdk/client-sqs'; import { Consumer } from 'sqs-consumer'; const sqs = new SQSClient({ apiVersion: '2012-11-05', region: 'us-east-1', credentials: { accessKeyId: #@@@# secretAccessKey: 232131321312 }, }); const app = Consumer.create({ queueUrl: EnvsEnum.QUEUE_URL, terminateVisibilityTimeout: true, waitTimeSeconds: 20, handleMessage: async (message) => { // ... my handler here doing some work on the message }, shouldDeleteMessages: true, region: 'us-east-1', sqs, }); app.on('error', (err, item) => { // ... }); app.on('processing_error', (err) => { // ... }); console.log('starting app...'); app.start();
我原本期望看到多条消息处于处理中状态,但在SQS控制台始终仅显示1条。请问可能的原因是什么?若我的实现方式有误,是否有合适的消费者实现指南?
更新
我已解决该问题,原因是发送消息时使用了相同的MessageGroupId,修正后消费者可正常并行工作。
内容的提问来源于stack exchange,提问作者mikejackowski
相关产品推荐
相关产品推荐

