Skip to content
tutorials

Sua Próxima Fila de Mensagens é o Postgres

Filas de mensagens dedicadas como Kafka e SQS frequentemente introduzem complexidade e custos desnecessários à sua stack. Descubra a extensão leve que transforma seu banco de dados Postgres existente em um message broker de alto desempenho.

Dani Roth
Sua Próxima Fila de Mensagens é o Postgres

O Argumento Contra o Inchaço de Brokers

Message brokers dedicados como SQS, Kafka e RabbitMQ introduzem um overhead operacional significativo e, muitas vezes, oculto. Você gerencia uma infraestrutura separada, incorrendo em custos de provisionamento, implantação, monitoramento e escalonamento de serviços distintos. Isso adiciona latência de rede e aumenta criticamente a carga cognitiva para desenvolvedores que integram e depuram múltiplos sistemas distribuídos, forçando uma complexidade desnecessária em sua stack.

Seu banco de dados Postgres existente oferece uma alternativa robusta e confiável, eliminando o inchaço de brokers. Construído sobre a conformidade ACID e o poder transacional testado em batalha, o Postgres fornece uma base comprovada para enfileiramento confiável, garantindo a integridade dos dados mesmo em falhas. Ele lida confortavelmente com milhões de linhas e milhares de requisições por segundo; por exemplo, um teste com 2 CPUs e 2GB de RAM processou 100.000 mensagens em 9 segundos, com uma média de 11.100 mensagens/segundo.

PGMQ formaliza esse padrão poderoso como uma extensão leve e simples. Ela entrega uma API semelhante ao SQS diretamente dentro do Postgres, permitindo a criação de filas, envio de mensagens com atrasos opcionais e consumo com visibility timeouts (VT) para garantir a entrega exatamente uma vez (exactly-once delivery). Isso significa que você ganha uma fila de mensagens totalmente funcional, com bibliotecas cliente para Rust, Python e TypeScript, sem adicionar um único novo serviço à sua stack.

Do Zero à Fila em 5 Linhas de SQL

Crie filas com SQL puro. Chame pgmq.create('my_queue'); cada fila se torna sua própria tabela no Postgres. Envie mensagens usando pgmq.send('my_queue', '{"job_id": 123}'). Isso incorpora mensagens como JSON diretamente dentro do Postgres, simplificando seu modelo de dados.

Implemente entrega agendada com pgmq.send(). Adicione um parâmetro delay (por exemplo, pgmq.send('my_queue', '{"task": "future"}', 30)). A mensagem entra na fila, mas permanece indisponível para consumo por 30 segundos, permitindo o agendamento avançado de tarefas sem serviços de cron externos.

Consuma mensagens via pgmq.read('my_queue', 30, 1). O parâmetro crítico vt (visibility timeout) torna as mensagens lidas invisíveis pela duração especificada (por exemplo, 30 segundos). Isso garante a entrega exatamente uma vez: nenhum outro worker pode processar a mesma mensagem durante sua janela ativa. Se não for processada ou excluída dentro do VT, ela reaparece na fila.

Uma vez processadas, remova as mensagens. Use pgmq.delete('my_queue', message_id) para remover permanentemente uma mensagem. Alternativamente, pgmq.archive('my_queue', message_id) exclui a mensagem da fila ativa e a move para uma tabela de arquivo dedicada, fornecendo um log histórico para auditoria ou reprocessamento.

Mas Será que Escala Mesmo?

"Mas não escala", você diz. Este é o refrão comum contra bancos de dados como filas. O Postgres, no entanto, lida confortavelmente com milhões de linhas e milhares de requisições por segundo. O PGMQ aproveita essa capacidade inerente, transformando uma fraqueza percebida em uma força para aplicações distribuídas.

Um teste de estresse recente validou o desempenho do PGMQ em recursos limitados. Pesquisadores provisionaram um container Docker com apenas 2 CPUs e 2GB de RAM. Eles então injetaram 100.000 mensagens em uma fila PGMQ. Esta configuração espelha ambientes típicos de serviços em produção, tornando os resultados altamente relevantes.

Cem trabalhadores simultâneos processaram todas as 100.000 mensagens em apenas 9 segundos. Cada trabalhador leu, registrou e excluiu mensagens em lotes. Isso se traduz em um throughput combinado superior a 11.100 mensagens por segundo. Para documentação abrangente e exemplos adicionais, consulte o repositório oficial do Postgres Message Queue (PGMQ).

Tal desempenho invalida inequivocamente o mito de que 'não escala' para praticamente todas as aplicações do mundo real. O PGMQ prova que o Postgres não é apenas viável, mas altamente performático como uma fila de mensagens, eliminando a sobrecarga operacional de corretores dedicados para a maioria dos casos de uso. Mantenha sua infraestrutura simples.

Gostando do artigo? Receba um assim na sua caixa de entrada toda manhã.

um e-mail por dia · cancele em dois cliques · sem rastreadores de terceiros

Integrando o PGMQ à Sua Aplicação

Integre o PGMQ diretamente na sua stack de aplicação. Vá além do SQL bruto com bibliotecas de cliente robustas para linguagens populares. O suporte oficial impulsiona integrações com Python e Rust, oferecendo interfaces idiomáticas. Bibliotecas orientadas pela comunidade estendem ainda mais o PGMQ para Ruby e várias variantes de TypeScript, incluindo uma experiência perfeita com Prisma.

Crie produtores com o mínimo de código. Um produtor Python envia uma mensagem com uma simples chamada send(), especificando o nome da fila e o payload JSON. Isso espelha o comando SQL pgmq.send(), abstraindo a interação com o banco de dados para você.

Trabalhadores consomem mensagens de forma eficiente. Use a função read() de uma biblioteca de cliente para buscar um lote de mensagens, respeitando o tempo limite de visibilidade (VT). Após o processamento, chame delete() ou archive() para remover as mensagens, garantindo a entrega exatamente uma vez e evitando o reprocessamento. Esse padrão lida com tarefas de alto volume.

Unificar suas camadas de dados e mensagens dentro do Postgres simplifica sua infraestrutura. Elimine a sobrecarga operacional de corretores de mensagens separados, reduzindo a latência de rede e a carga cognitiva. Essa consolidação agiliza o desenvolvimento, teste e implantação, gerando um sistema mais robusto e sustentável.

Perguntas Frequentes

O que é o PGMQ?

PGMQ (Postgres Message Queue) é uma extensão leve para PostgreSQL que permite a funcionalidade de fila de mensagens diretamente dentro do banco de dados, oferecendo uma alternativa a serviços como AWS SQS, RabbitMQ ou Kafka.

Como o PGMQ garante a entrega exatamente uma vez?

O PGMQ usa um 'tempo limite de visibilidade'. Quando uma mensagem é lida, ela se torna invisível para outros consumidores por um período definido. O consumidor deve excluir ou arquivar a mensagem dentro desse tempo. Se falhar, a mensagem reaparece para outro consumidor processar, evitando a perda de dados.

O PGMQ pode lidar com tráfego de nível de produção?

Sim. Benchmarks mostram que o PGMQ pode processar mais de 11.000 mensagens por segundo em hardware modesto (por exemplo, um container de 2 CPUs). Isso é mais do que suficiente para muitas aplicações distribuídas de alto volume.

Qual é o principal benefício de usar o Postgres como uma fila de mensagens?

O benefício principal é a simplificação da infraestrutura. Ao aproveitar seu banco de dados existente, você reduz dependências, diminui a sobrecarga operacional e simplifica toda a sua stack tecnológica sem sacrificar o desempenho para a maioria dos casos de uso comuns.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only

Para builders

Esta página está trabalhando para a ferramenta de outra pessoa.

Agentes de IA leem. Compradores chegam nela. Ela responde em oito idiomas e via MCP. Sua ferramenta pode ter uma assim — no ar em 24 horas.