📋 Microsservico com RabbitMQ e Java

Hackathon ASAPCARD

pikachu

🚀 Processamento e Envio de Transações

No mundo moderno das transações financeiras e comerciais, a eficiência e a confiabilidade são fundamentais. Um sistema que integra tecnologias como Spring, RabbitMQ, MySQL e Docker oferece uma solução poderosa para lidar com o processamento e o envio de transações de forma eficiente e segura.

📶 Tecnologias

  • Spring Boot 3.2.0 - Desenvolvida com o poderoso Spring Boot.

  • RabbitMQ 3.12.12-management - Middleware de mensageria de código aberto e multiplataforma para comunicação assíncrona.

  • Docker 3.8 - Plataforma de virtualização de ambientes, para envio e execução de aplicações em contêineres.

  • MySQL 8 - Sistema de gestão de banco de dados SQL confiável e amplamente utilizado.





🔎 Fluxograma do Projeto

arquitetura do projeto


- Arquitetura: Segue o padrão MVC com uma abordagem Web Spring API.
  • Dependências: Incluem Spring Web, Spring Boot Devtools, Validation, Spring Data JPA, MySQL Driver, MySQL, RabbitMQ, OpenCSV.

💾 Setup

  • Clone o repositorio
git clone https://github.com/GrazielleNascimento/hackathon-asapcard-pikachu

Instalação

Docker desktop

  • Instalação do docker: 'https://www.docker.com/products/docker-desktop/'

apos a instalação do Docker:

acessar a pasta docker no projeto:

cd hackathon-asapcard-pikachu
/docker/

ao acessar a pasta docker:

docker compose up -d

💡Executando o RabbitMQ

  • Acesse o RabbitMQ
http://localhost:15672/
Username:
guest
Password:
guest

📍 Testando a aplicação

Produtor:

  • Rode o sistema Produtor

  • Inicie o aplicativo Insomnia no seu computador (ou outro gerenciador de requisições).

  • Crie uma Nova Requisição do Tipo 'POST':

  • Envie primeiramente o post vazio para /datadto

/datadto = envia o dataDTO para a fila transactionsQueue

  • Base URL: 'http://localhost:8080/datadto'

  • execute o método post abaixo apenas se o consumidor já tiver lido as transactions

/statusdto = envia o StatusDTO para a fila statusQueue

  • Base URL: 'http://localhost:8080/statusdto'

Consumidor:

  • Altere o application.properties e mude o username e password de acordo com o seu banco de dados mySQL

  • Rode o sistema Consumidor

  • O sistema irá ler toda as filas. É importante que apenas a fila de transactions seja lida neste momento.

  • Crie uma Nova Requisição do Tipo 'Get':

  • transaction/all/ = retorna todas as transações, neste momento elas ainda estão pendentes

  • após toda fila de transações for salva no programa, agora é a hora de receber todas os Status. Rode novamente o produtor, e dessa vez use o caminho /statusdto no insomnia para enviar os status no rabbit.

  • execute o consumidor e aguarde o programa atualizar o status de todas transações.

  • transaction/all/{status} = retorna todas as transações de acordo com o status passado do PathVariable. Exemplo: transaction/all/c = busca todos confirmados a partir do status C

c - processamento concluido
n - processamento negado
p - processamento pendente

Diagrama de Classes

classDiagram

class Person {
  - id : String
  - name : String
  - age : Short
  - transactions : List<Transaction>
 
}
class Transaction {
  - id : String
  - transaction_date : String
  - amount: Double
  - person: Person
  - status: char
  - installments : List<Installment>
 

}
class Installment {
  - id : UUID
  - installment_number: Integer
  - value : Double
  - transaction : Transaction
}

Person --> Transaction
Transaction --> Installment
Loading

😎 Colaboradores