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.
Neste projeto usei a IDE "IntelliJ" Versão: IntelliJ IDEA Community Edition 2022.1
Faça o download do projeto e abra os microserviços na IDE "IntelliJ IDEA"
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.
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.
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.
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.
Publisher -> Publica a mensagem.
Exchange -> Pega a mensagem, processa e encaminha para fila.
Queue -> Fila
Consumer -> Receptor da mensagem.
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.
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.
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.
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