Skip to content

Arquitetura De Microservices, Serviços de Mensageria, RabbitMQ, Keycloak...

Notifications You must be signed in to change notification settings

TalissonMelo/ms-rabbitmq-keyclock

Repository files navigation

Spring Boot Microservices, RabbitMQ e Keycloak.

Descrição do Projeto

Esse projeto tem como objetivo inicial demonstrar o uso das tecnologias Spring Boot, Spring Cloud, Docker, RabbitMQ, Eureka Discovery, Zuul Gateway, Spring Security, OAuth2, Keyclock, Spring Web, MySQL, Lombok, e Maven.

Informações relacionadas a IDE utilizada.

Neste projeto usei a IDE "IntelliJ" Versão: IntelliJ IDEA Community Edition 2022.1

Como replicar o projeto em meu ambiente de execução?

Faça o download do projeto e abra os microserviços na IDE "IntelliJ IDEA"

API Gateway

E uma aplicação que se registra no service registry, ela recebe uma notificação do cliente como por exemplo fazer um cadastro ou buscar um de cliente. A mesma verifica em qual microservice ela tem que ir atraves do service registry que vai passar o servidor, porta, caminho e o endereço IP do microservice desejado, e encaminha a requisição ao microservice de endpoint desejado.

API GATEWAY faz com que o cliente nao consiga acessar diretamente nenhum microservice.

exemplo

Service Discovery

O Service Discovery é um dos principais princípios da arquitetura baseada em microservices. Imagine que temos muitos serviços dinamicamente distribuídos na rede. Onde as instâncias de serviços mudam dinamicamente devido a escala automática, falhas, atualizações e não temos controle de endereços IP e nem o nome da instância.

O ideal nessa situação seria que o serviço comunica-se ao servidor ou até mesmo a algum serviço que poderia chamá-lo que está disponível para ser requisitado.

exemplo

Service Broker

O Service Broker fornece enfileiramento e mensagens confiáveis para as requisições e respostas a mesma ajuda os desenvolvedores a compor aplicativos de componentes independentes denominados serviços. Os aplicativos que exigem a funcionalidade exposta nesses serviços usam mensagens para interagir com os serviços.

O Service Broker usa TCP/IP para trocar mensagens entre instâncias. O Service Broker contém recursos para ajudar a impedir o acesso não autorizado da rede e para criptografar mensagens enviadas pela rede usa a comunicação assíncrona você envia a mensagem, caso o destinaria esteja indisponível o RabbitMQ guarda a mensagem e quando o service estiver disponível ele entrega a mensagem como no exemplo abaixo.

exemplo

RabbitMQ

O RabbitMQ é um software de enfileiramento de mensagens também conhecido como intermediário de mensagens ou gerenciador de filas.

Quando o usuário inserir informações do usuário na interface da web, o aplicativo da web criará uma mensagem que inclui todas as informações importantes que o usuário precisa em uma mensagem e a colocará em uma fila definida no RabbitMQ.

exemplo

Publisher -> Publica a mensagem.

Exchange -> Pega a mensagem, processa e encaminha para fila.

Queue -> Fila

Consumer -> Receptor da mensagem.

Fluxo de mensagens no RabbitMQ

exemplo

1 - O usuário envia uma solicitação de criação de mensagem (JSON) para o aplicativo da web.

2 - O aplicativo da web (o produtor) envia uma mensagem ao RabbitMQ que inclui dados da solicitação, como nome e e-mail.

3 - Uma troca aceita as mensagens do produtor e as encaminha para as filas de mensagens corretas para a entrega da mensagem.

4 - O consumidor recebe a mensagem e inicia o processamento da mesma.

Exchanges

exemplo

1- O produtor publica uma mensagem para uma troca. Ao criar uma troca, o tipo deve ser especificado.

2 - A exchange recebe a mensagem e agora é responsável pelo roteamento da mensagem. A troca leva em consideração diferentes atributos de mensagem, como a chave de roteamento, dependendo do tipo de troca.

3 - As ligações devem ser criadas da troca para as filas. Nesse caso, há duas ligações para duas filas diferentes da troca. A troca roteia a mensagem para as filas dependendo dos atributos da mensagem.

4 - As mensagens permanecem na fila até serem tratadas por um consumidor

5 - O consumidor manipula a mensagem.

Tipos de exchanges

exemplo

Direct: A mensagem é roteada para as filas cuja chave de ligação corresponde exatamente à chave de roteamento da mensagem.

Fanout: Uma troca de fanout roteia mensagens para todas as filas vinculadas a ela.

Topic: A troca de topic faz uma correspondência curinga entre a chave de roteamento e o padrão de roteamento especificado na ligação.

Direct

Envia expecificamente para uma fila.

exemplo

Fanout

Vai mandar esta mensagem para os que estão relacionadas a esta exchange (envia para todas).

exemplo

Topic

Adiciona regras (Dependente do Tipo da mensagem (routing key) mando para uma exchange).

exemplo

Headers

Menos utilizado (No Headers fica expecificado a fila para qual deve ser enviada).

exemplo

FIFO -> Primeira que entrou primeira que vai sair

Propriedades:

Durable ou não: Se ela deve ser salva mesmo depois do restart do broker

Auto-delete: Removida automaticamente quando o consumer se desconecta

Expiry: Define um tempo de espera para fila ou tempo que não há mensagens ou clientes consumindo a mesma

Message TTL: Tempo de vida da mensagem (Se ninguem consumila remove a mesma)

Overflow : Quando esta fila Transborda > Drop Head (remove a última e entra uma nova mensagem) > Reject publich (Fila lotada o publicador não consegue mais registrar na fila)

Exclusive: Somente channel que criou pode acessar

Max Length ou bytes: Quantidade de mensagens ou tamanho em bytes maximo permitido

Armazenar Mensagens em disco

http://tryrabbitmq.com/