Skip to main content

RabbitMQ-based Push Queue client for HTTP task dispatching

Project description

Boreal Push Queue 🌲🐇

Boreal Push Queue é uma biblioteca Python que simula o comportamento de Push Queues do Google Cloud Tasks, utilizando o RabbitMQ como infraestrutura de mensageria.

A ideia é simples: você enfileira uma tarefa (Publisher) e um serviço (Worker) escuta essa fila, disparando automaticamente uma requisição HTTP para um endpoint pré-definido.

✨ Funcionalidades

  • Abstração Simples: Interface amigável para enfileirar tarefas.
  • Push Pattern: O Worker converte mensagens da fila em chamadas HTTP (POST/GET).
  • Concorrência Controlada: Define o limite de requisições simultâneas.
  • Configurável: Suporte a diferentes métodos HTTP e cabeçalhos.
  • Cron Embutido (Opcional): O Worker pode chamar GET na URL do PushQueue em um agendamento crontab.

🚀 Instalação

pip install boreal-push-queue

🛠️ Como usar

1. Enfileirando Tarefas (Publisher)

from boreal_push_queue import BorealPushQueue

# Inicializa a fila definindo o destino das tarefas
boreal_queue = BorealPushQueue(
    queue_name="minha-fila-de-emails",
    url="https://api.meuservico.com/v1/send-email",
    method="POST",
    max_requests=10,
)

# Define os dados da tarefa
task = {
    "id": "12345",
    "name": "Enviar Boas-vindas",
}

# Envia para o RabbitMQ
boreal_queue.add(task)

2. Executando o Worker

O Worker é responsável por ler as mensagens e disparar os gatilhos HTTP.

from boreal_push_queue import BorealPushQueue, BorealWorker

push_queue = BorealPushQueue(
    queue_name="minha-fila-de-emails",
    url="https://api.meuservico.com/v1/send-email",
    method="POST",
    max_requests=10,
    cron=True,
    crontab="*/5 * * * *",
)

worker = BorealWorker(push_queue)
worker.start()

Ou via CLI:

boreal-worker --queue-name minha-fila-de-emails --url https://api.meuservico.com/v1/send-email --cron --crontab "*/5 * * * *"

⚙️ Configurações Necessárias

A biblioteca utiliza variáveis de ambiente para conexão e comportamento:

  • BOREAL_RABBITMQ_URL: URL de conexão (Ex: amqp://guest:guest@localhost:5672/)
  • BOREAL_MAX_REQUESTS: concorrência/prefetch do Worker (default: 10; usado principalmente no CLI)
  • BOREAL_HTTP_TIMEOUT: timeout HTTP em segundos (default: 10)
  • BOREAL_REQUEUE_ON_FAILURE: true/false (default: true)

🏗️ Arquitetura e Funcionamento (Documentação Interna)

Fluxo de Dados

  1. Instanciação: Ao criar o BorealPushQueue, os metadados do endpoint (URL, Método) são armazenados.
  2. Produção (add): Quando add(task) é chamado, a biblioteca encapsula a tarefa junto com as informações de destino em um envelope JSON e envia para o RabbitMQ.
  3. Persistência: O RabbitMQ garante que a mensagem não seja perdida se o serviço de destino estiver fora do ar.
  4. Consumo (Worker): O BorealWorker fica em loop (consumidor persistente). Ao receber uma mensagem:
    • Extrai os dados da tarefa e a URL de destino.
    • Executa a chamada HTTP com controle de vazão/concorrência via prefetch_count.
    • Se o endpoint responder com sucesso (2xx), envia um ACK para o RabbitMQ remover a mensagem da fila.

Componentes Principais

BorealPushQueue (Client)

Responsável pela interface com o desenvolvedor. Ele não faz chamadas HTTP, apenas prepara a mensagem para que alguém a execute no futuro.

BorealWorker (Dispatcher)

É o motor de execução. Ele utiliza internamente um cliente HTTP (httpx) para transformar eventos de fila em requisições Web.

Gerenciamento de Falhas

Caso a requisição HTTP falhe (ex: erro 500 ou Timeout), a mensagem é re-enfileirada por padrão (nack com requeue=True), garantindo o modelo de entrega at-least-once.

Para que serve o Cron?

Quando cron=True, o BorealWorker executa um cron embutido e faz GET na url do BorealPushQueue no intervalo definido por crontab.

A intenção é usar o GET na mesma rota como um “deadcase/rotina de manutenção” (ex.: reprocessar pendências, verificar consistência, disparar rotinas idempotentes), enquanto o POST continua sendo o processamento das mensagens vindas do RabbitMQ.

Obs.: o cron roda por instância do worker. Se você subir múltiplos workers com cron=True, cada um fará o GET no mesmo agendamento.


📄 Licença

Distribuído sob a licença MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

boreal_push_queue-0.2.1.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

boreal_push_queue-0.2.1-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file boreal_push_queue-0.2.1.tar.gz.

File metadata

  • Download URL: boreal_push_queue-0.2.1.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for boreal_push_queue-0.2.1.tar.gz
Algorithm Hash digest
SHA256 d127d465c52af51425de34e9b23c07b19f2823a1ba720d8b0916078ea77e6499
MD5 46ea6835ea09e6bf7e812284416c5627
BLAKE2b-256 f8cb383b6a3f59abc1b62b49d1976c138484fccf815b99efa361248fc5bb820c

See more details on using hashes here.

File details

Details for the file boreal_push_queue-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for boreal_push_queue-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2bcdb2e84ada85c9636227a46f14de2d0710861a6f70e93ceb5926b84ec80ebe
MD5 187f5ec419e615c05db6377b2fa6b558
BLAKE2b-256 81d7e87998b44e6c613573994030981ac64f5127b7ae82f376593001a429b343

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page