Fila

Fluxo das Filas

Documentação de Fila dos sistemas

Esta documentação tem como objetivo padronizar o uso das filas em nossos sistemas, seguindo boas práticas para gerenciamento de tarefas e colaboração. O fluxo de trabalho adotado será baseado no conceito de filas, onde as tarefas são organizadas e processadas de forma eficiente.

Git Flow

Componentes Envolvidos

Sistemas

  • PSYCS
  • UITASK
  • UISHOP

Esses sistemas enviam solicitações relacionadas a pagamentos para a fila Kafka por meio da API Produtor.

Kafka (Mensageria)

Utilizado para intermediar a comunicação assíncrona entre os sistemas. Os tópicos são nesse padrão:

sistema.contexto.tarefa, onde contexto é o contexto da notificação e tarefa é a ação a ser realizada.

  • sistema.pagamento.efetuado
  • sistema.pagamento.falha
  • sistema.notificacao.enviar
  • sistema.gerador.gerado
  • sistema.gerador.falha

API Produtor

Responsável por publicar mensagens nos tópicos Kafka. Desenvolvida em Node.js (produtor.uitec.com.br). As mensagens contêm informações como:

  • Remetente
  • Destinatário
  • Conteúdo

API Consumer

Consome as mensagens dos tópicos Kafka e realiza a ação correspondente, como atualizar o status do pagamento nos sistemas internos. Desenvolvida em Node.js (consumer.uitec.com.br).

ASAAS

Gateway de pagamento utilizado para efetuar transações. A API Produtor se comunica diretamente com o ASAAS para realizar os pagamentos.

Fluxo

  1. O sistema (PSYCS, UITASK ou UISHOP) gera uma solicitação de pagamento.
  2. A API Produtor envia a solicitação para um tópico Kafka.
  3. O Kafka recebe a mensagem e disponibiliza no tópico correspondente.
  4. A API Consumer escuta os tópicos e consome a mensagem.
  5. O pagamento é processado pela ASAAS.
  6. As informações do resultado são retornadas para o sistema de origem.

Tópicos

Tópico é um canal de comunicação dentro do Kafka, onde as mensagens são publicadas e consumidas. Cada tópico é identificado por um nome único e pode conter várias mensagens. Os tópicos são utilizados para organizar as mensagens de acordo com o contexto e a ação a ser executada.

Ficaram organizados da seguinte forma:
[sistema].[modulo].[acao]

  • Sistema: Sistema na qual o tópico está definido.
  • Módulo: Submodulo ou divisão dentro do sistema, podendo definir também a url pra onde a mensagem será enviada.
  • Ação: Ação a ser executada

Tópicos pré-definidos

  • psycs.pagamento.resposta resposta do Gateway de pagamento (ASAAS) para o PSYCS.
    Asaas para o Psycs
  • psycs.notifica.enviar enviar notificação através da API de notificação.
    Psycs para a API de notificação
  • psycs.agendamento.sala Criar sala automaticamente no google meet ou zoom.
    Psycs para o Agendamento de sala
  • uishop.notafiscal.resposta resposta da API de notafiscal para o Uishop.
    Api de notafiscal para o Uishop

Considerações Técnicas

  • Ambas as APIs (Produtor e Consumer) são escritas em Node.js.
  • Kafka é o responsável por desacoplar os sistemas, melhorando a escalabilidade e resiliência.
  • Permite adicionar novos sistemas ou gateways sem impacto direto na arquitetura principal.

Como usar?

Monitoro o Kafka

  • Por linha de comando
  • Grafana + Prometheus

Notificar o kafka (API Produtor)

Para notificar o Kafka, você deve enviar uma mensagem para o tópico apropriado usando a API Produtor. A mensagem deve conter todas as informações necessárias para que o sistema consumidor possa processá-la corretamente.

  • Notificar o Kafka de forma genérica
    • Endpoint: POST http://produtor.uitec.com.br/api
    • Headers:
      • Content-Type: application/json
      • Authorization: Bearer {token}
    • Body:
                                              {
                                                  "topic": "sistema.modulo.acao",
                                                  "message": "examaple message",
                                              }
                                          
  • Notificar o Kafka originando do Asaas (pagamento)
    • Endpoint: POST http://produtor.uitec.com.br/pagamento
    • Headers:
      • Content-Type: application/json
    • Body:
                                              {body do asaas}
                                          

Consumir mensagens (API Consumer)

A API Consumer é responsável por consumir as mensagens do Kafka e processá-las conforme necessário. Ela escuta os tópicos configurados e executa as ações correspondentes às mensagens recebidas.

  • Endpoint: GET http://consumer.uitec.com.br/
  • Headers:
    • Content-Type: application/json
    • Authorization: Bearer {token}
  • Body: Não é necessário enviar corpo na requisição.