Trabalhando com mensagens gigantes no AWS SQS e Node

Na Aktie Now usamos vários serviços da AWS, entre eles o “mais queridinho”, o SQS (Simple Queue Service). Em uma das soluções implementamos um conjunto de funções Lambdas que são ativas sempre que uma fila recebe uma mensagem, até aí tudo ótimo, mas existe um porém…

O SQS possui uma limitação quanto ao tamanho da mensagem, por definição esse limite é de 256kb! A equipe da AWS até criou uma biblioteca de extensão que expande esse limite até 2Gb, porém, apenas para Java…

Na verdade o que a biblioteca faz é um bem-bolado, workaround, macete que funciona assim:

  1. Verifica se a mensagem é maior que 256kb,
  2. Se sim, cria um arquivo no S3 Bucket com o conteúdo da mensagem,
  3. Envia para o SQS uma mensagem com informações do arquivo, nome do bucket e key.
  4. Ao receber uma mensagem com um payload do S3 recupera o conteúdo no bucket.

Para tratar essa particularidade, sem usar Java, desenvolvi um pacote que faz o serviço sujo: sqs-huge-message

SQS Huge Message: Processo de envio de mensagens.
SQS Huge Message: Processo de recebimento de mensagens.

Instalar

npm install sqs-huge-message

Configurar

import { SqsService } from './sqs-huge-msg';

const sqsOptions = {
    endpoint: ENDPOINT_SQS,
    region: REGION,
    queueName: QUEUE_NAME,
    s3EndpointUrl: ENDPOINT_S3,
    s3Bucket: BUCKET_NAME,
}

Usar

//Enviar mensagem
const payload = await sqsService.sendMessage(sqsOptions.queueName, message);

//Receber mensagem
const message = await sqsService.getMessage(sqsOptions.queueName);


Dessa forma é possível enviar e receber mensagens grandes, de até 2gb, sem se preocupar com o processo de criação e recuperação no S3. O pacote funciona perfeitamente com o Lambda porque não trabalha como um consumer da fila, ele apenas recebe a mensagem e apaga em seguida. Ideal para usar com conjunto: SQS, Lambda, Trigger events.

O pacote está disponível no NPM e no Github. Contribuições são sempre bem vindas e em breve irei adicionar novas configuração.

Gostou da forma como abordamos os problemas aqui na Aktie Now? Então dê uma olhada nas nossas vagas. 😃

Marcações:

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *