Pular para o conteúdo
~/.primo-academy.sh
Intermediário1 semana

Fila de Atendimento

Um sistema de senha de atendimento com prioridade — onde a fila não é uma tabela no banco, é uma fila de verdade.

rabbitmqmensageriafilasapibackend

// pratica as trilhas

// criado por

fonte

Todo mundo já pegou senha em banco ou posto de saúde. Aqui você constrói o sistema por trás disso — com atendimento preferencial, painel de chamada e histórico.

Objetivo

Praticar o momento em que fila deixa de ser estrutura de dados e vira infraestrutura. Você vai sentir na prática a diferença entre "guardar quem está esperando numa tabela" e "ter uma fila de verdade", e descobrir que prioridade muda tudo.

Requisitos

  • Endpoint que registra alguém na fila e devolve a senha e a posição
  • Categorias de atendimento (ex.: geral, preferencial) em filas separadas
  • Endpoint que chama o próximo, respeitando a prioridade entre categorias
  • Consulta de posição na fila por senha
  • Cancelar/desistir da senha antes de ser chamado
  • Histórico de chamadas: quem foi chamado, quando e por qual guichê

Desafios extras

  • Painel em tempo real com a senha atual (WebSocket ou polling)
  • Tempo médio de espera por categoria, calculado do histórico
  • Rechamada: senha não atendida volta pra fila, mas com limite de tentativas
  • Vários guichês consumindo ao mesmo tempo sem chamar a mesma senha duas vezes
  • Fila com prioridade nativa do RabbitMQ (x-max-priority) em vez de filas separadas

Dicas

  • Comece decidindo o que é mensagem. A senha em si? O evento "senha emitida"? Essa escolha define o resto do desenho — pense antes de codar.
  • Consultar posição numa fila AMQP não é trivial: fila não foi feita pra ser lida no meio. Provavelmente você vai precisar de um estado paralelo (banco ou cache) espelhando a fila. Isso é normal — e é a lição.
  • Preferencial na frente do geral não é "outra fila só": é decisão de quem consome. Duas filas e um consumidor que escolhe? Prioridade nativa? Anote o trade-off da sua escolha.
  • Guichê que chama e não atende (o cliente sumiu) é o caso que quebra implementação ingênua. Resolva com ack manual — se o guichê não confirma, a senha não pode se perder.

// avaliação do projeto

—
ainda sem avaliações