sqs 队列有多个 Nodejs 消费者?

问题描述 投票:0回答:1

我有一个包含数千条消息的 SQS 队列。由于函数的大小(使用 puppeteer),我无法在 lambda 上使用它们,因此我已将消费者转移到 EC2 实例。由于这是 POC,我使用这个 (https://github.com/bbc/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 条消息。可能是什么原因?如果我的做法完全错误,也许有一些很好的指南来实现适当的消费者?

For context, here is my queue config

更新

我通过意识到我正在向队列发送相同的 MessageGroupId 来解决问题 - 修复使消费者按预期并行工作。

node.js amazon-ec2 amazon-sqs pm2
1个回答
0
投票

登录只是为了表示感谢:)遇到了完全相同的问题

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.