background-process-js
Version:
A set of util tools for create background process.
63 lines (62 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SQSConsumer = void 0;
const client_sqs_1 = require("@aws-sdk/client-sqs");
const consumer_1 = require("../../consumer");
const crypto_1 = require("crypto");
class SQSConsumer extends consumer_1.Consumer {
constructor(sqsConfig, continuouslyPolling = false) {
super({
continuouslyPolling,
hasDeadQueue: !!sqsConfig.deadQueueUrl,
maxReceivedMessages: sqsConfig.MaxNumberOfMessages,
timeoutAfterEndingPollingInMilliseconds: sqsConfig.WaitTimeSeconds,
});
this.sqsConfig = sqsConfig;
}
async getMessages() {
const receiveCommand = new client_sqs_1.ReceiveMessageCommand({
QueueUrl: this.sqsConfig.mainQueueUrl,
WaitTimeSeconds: this.sqsConfig.WaitTimeSeconds,
VisibilityTimeout: this.sqsConfig.VisibilityTimeout,
MaxNumberOfMessages: this.sqsConfig.MaxNumberOfMessages,
MessageAttributeNames: this.sqsConfig.MessageAttributeNames,
MessageSystemAttributeNames: this.sqsConfig.MessageSystemAttributeNames,
});
const { Messages } = await this.sqsConfig.client.send(receiveCommand);
if (!Messages)
return [];
return Messages;
}
async deleteMessages(messages) {
if (messages.length === 0)
return;
const deleteMessageCommand = new client_sqs_1.DeleteMessageBatchCommand({
QueueUrl: this.sqsConfig.mainQueueUrl,
Entries: messages.map((message) => ({
Id: message.MessageId,
ReceiptHandle: message.ReceiptHandle,
})),
});
await this.sqsConfig.client.send(deleteMessageCommand);
}
async markAsDeadMessages(messages) {
if (messages.length === 0)
return;
if (!this.sqsConfig.deadQueueUrl) {
throw Error("Need to pass 'deadQueueUrl' in sqs config");
}
const isFifoQueue = this.sqsConfig.deadQueueUrl.includes(".fifo");
const sendMessageBatchCommand = new client_sqs_1.SendMessageBatchCommand({
QueueUrl: this.sqsConfig.deadQueueUrl,
Entries: messages.map((message) => ({
Id: message.MessageId,
MessageBody: message.Body,
MessageDeduplicationId: isFifoQueue ? (0, crypto_1.randomUUID)() : undefined,
MessageGroupId: isFifoQueue ? this.sqsConfig.deadQueueUrl : undefined,
})),
});
await this.sqsConfig.client.send(sendMessageBatchCommand);
}
}
exports.SQSConsumer = SQSConsumer;