8000 GitHub - uadson/fastqueue: FastAPI + Celery
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

uadson/fastqueue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FastAPI + Celery + RabbitMQ: Processamento Assíncrono de APIs Externas

FastQueue Build FastQueue Tests

Este projeto demonstra como utilizar FastAPI e Celery com RabbitMQ para realizar chamadas assíncronas a APIs externas, lidando com falhas como timeout e autenticação.

📌 Tecnologias Utilizadas

  • FastAPI → Framework para criar a API.
  • Celery → Gerenciamento de tarefas assíncronas.
  • RabbitMQ → Broker de mensagens.
  • Flower → Monitoramento das tarefas Celery.
  • Requests → Biblioteca para chamadas HTTP.

🚀 Como Rodar o Projeto

1️⃣ Instalar Dependências

pip install fastapi celery[redis] uvicorn requests flower

2️⃣ Iniciar o RabbitMQ

docker run -d --hostname rmq-broker --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management

3️⃣ Iniciar o Celery Worker

celery -A celery_worker.celery_app worker --loglevel=info

4️⃣ Rodar FastAPI

fastapi dev

Monitoramento com Flower

O Flower permite visualizar e monitorar as tarefas do Celery em tempo real.

1️⃣ Iniciar o Flower

celery -A celery_worker.celery_app flower --port=5555

2️⃣ Acessar o Painel do Flower

  • Acessar http://localhost:5555 para visualizar as tarefas em tempo real.
  • Lá você pode ver: ✅ Tarefas pendentes, em execução e finalizadas. ✅ Tempo de execução e falhas. ✅ Tentativas de reexecução por timeout ou erro.

Testando a API

  • Enviar uma requisição para a API externa
curl -X 'POST' 'http://127.0.0.1:8000/request/' -H 'Content-Type: application/json' -d '{"url": "https://jsonplaceholder.typicode.com/todos/1", "token": "meu_token"}'
  • Resposta esperada:
{
    "task_id": "b95b9e8f-2f27-49b1-97b5-34aef06b745d",
    "status": "PENDING"
}

Consultar o Status da Tarefa

curl -X 'GET' 'http://127.0.0.1:8000/status/b95b9e8f-2f27-49b1-97b5-34aef06b745d'
  • Resposta enquanto está processando:
{
    "task_id": "b95b9e8f-2f27-49b1-97b5-34aef06b745d",
    "status": "PENDING",
    "result": null
}
  • Resposta após concluir:
{
    "task_id": "b95b9e8f-2f27-49b1-97b5-34aef06b745d",
    "status": "SUCCESS",
    "result": {
        "userId": 1,
        "id": 1,
        "title": "delectus aut autem",
        "completed": false
    }
}

Como funciona?

1 - O FastAPI recebe uma requisição para acessar uma API externa.
2 - A requisição é enviada para a fila do RabbitMQ usando Celery.
3 - O Worker Celery recupera a tarefa e faz a requisição à API externa.
4 - Se houver timeout ou erro, o Celery tenta novamente automaticamente.
5 - O usuário pode consultar o status da tarefa via API.

About

FastAPI + Celery

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0