O Continuous Communication
é uma API para gerenciamento de mensagens que
serão enviadas por diversos canais, como por exemplo E-MAIL
, SMS
, PUSH
e WHATSAPP
.
O envio das mensagens salvas será feito através de um serviço paralelo de mensageria.
A comunicação com esse serviço será feita através do protocolo AMQP. O serviço AMQP que será utilizado é o RabbitMQ
e as mensagens serão enviadas para um Exchange do tipo Topic que irá distribuir as mensagens para as filas usando Routing Keys.
O consumo das mensagens enviadas para o RabbitMQ
será feito através de um Worker,
que no caso poderia ser separado em uma outra aplicação para garantir uma maior escalabilidade e segregação de reponsabilidades.
- Spring Boot
- MySQL
- Swagger
- JPA
- Hibernate
- Docker
- JUnit5
- Mockito
- RabbitMQ
A aplicação foi dividida em cinco módulos.
Configuration
- Módulo para configurações dosBeans
como RabbitMQ, SwaggerController
- Módulo que contém osEntry Points
do sistema, osDTOs
e os mappers dos DTOs para os objetos doCORE
Core
- Módulo que contém toda a régra de negócio e totalmente isolado dos outros módulos.Data Provider
- Módulo responsável por comunicar com o banco de dádos e outros serviços.Worker
- Módulo reponsável por receber as mensagens vindas do RabbitMQ.
O Continuous Communication
pussui um grupo de entradas, que é o controlador de mensagens.
Esse controlador possui três entradas, que estão listadas abaixo.
- (GET) Consulta através do Id da mensagem que salva no banco de dados (/message/{id})
- (DELETE) Remove uma mensagem através do Id (/message/{id})
- (POST) Salva uma nova mensagem no banco de dados (/message/register)
- Buscar Mensagem Pelo Id
curl -X GET \
http://localhost:9999/message/2ce28328-458f-439d-aa3b-5f3848f3ac87 \
-H 'cache-control: no-cache' \
-H 'postman-token: c2b2a103-1a76-bc53-48d7-a5f556380e26'
{
"uuid": "2ce28328-458f-439d-aa3b-5f3848f3ac87",
"message": "Mensagem que irá no email",
"destiny": [
"[email protected]",
"[email protected]"
],
"messageType": "email",
"sendTime": "2020-07-08T02:16:45.000+00:00",
"messageStatus": "SENT"
}
- Remover Mensagem Pelo Id
curl -X DELETE \
http://localhost:9999/message/2ce28328-458f-439d-aa3b-5f3848f3ac87 \
-H 'cache-control: no-cache' \
-H 'postman-token: 9f84a105-3f2f-9906-55af-13063628c032'
{
"uuid": "2ce28328-458f-439d-aa3b-5f3848f3ac87",
"message": "Mensagem que irá no email",
"destiny": [
"[email protected]",
"[email protected]"
],
"messageType": "email",
"sendTime": "2020-07-08T02:16:45.000+00:00",
"messageStatus": "SENT"
}
- Registrar Mensagem
curl -X POST \
http://localhost:9999//message/register \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'postman-token: ac0f8976-b4be-4293-49fe-5bc1de0a4023' \
-d '{
"destiny": [
"[email protected]",
"[email protected]",
"[email protected]"
],
"message": "Mensagem para os emails 3, 4, 5",
"messageType": "email",
"sendTime": "2020-07-08T03:20:39.104Z",
}'
{
"uuid": "732eaefb-d23d-4e3e-8c2e-aad4a3053a1e",
"message": "Mensagem para os emails 3, 4, 5",
"destiny": [
"[email protected]",
"[email protected]",
"[email protected]"
],
"messageType": "email",
"sendTime": "2020-07-08T03:20:39.104+00:00",
"messageStatus": "WAITING"
}
Estando na raiz do projeto utilize os comandos abaixo.
- docker-compose up --build -d
Para iniciar oDocker
com o banco de dadosMySQL
e o sevidorRabbitMQ
.- mvn clean install
Para fazer o build da aplicação e execução de testes unitários.- mvn spring-boot:run
Comando para iniciar a aplicação.
Para testar a aplicação com o Swagger
basta estar com o projeto executando e acessar a url http://localhost:9999/swagger-ui.html