Trabalhei em uma aplicação uma vez, onde um monolito era produtor e consumidor ao mesmo tempo, utilizava como broker de eventos o Cloud Task do GCP
Na Queue do Cloud Task é configurado o endpoint para qual ele deve enviar a mensagem, eu nem sei se faz sentido chama-lo de consumidor, porque ele não consome a mensagem, apenas recebe uma requisição…
Mas eu queria saber se isso pode ser considerado um evento, ou para ser considerado um evento, eu precisaria obrigatoriamente de uma OUTRA aplicação consumindo…
Se, para ser considerado evento, não pode ser a mesma App recebendo e enviando mensagens…
Ou ele se encaixaria em outro tipo de mensagem, como Comando, seguindo modelo point-to-point…
Qual a sua leitura em relação a esse tipo de arquitetura?
Consegui encontrar a resposta para essa dúvida lendo o capítulo 6, especificamente a seção 1, lá fica claro que existem 2 tipos de interação da app consumidora: push e pull
O push é exatamente esse do Cloud Task que trabalhei, o broker vai empurrar (push) o evento para a app através de um endpoint POST
No caso do pull, a app consumidora que vai até o broker puxar (pull) o evento, entendi que isso pode ser feito através de uma conexão aberta com websocket, pode ser com SSE também, ou polling curto / polling longo (ficar batendo no broker de tempos em tempos, no tópico sobre Webhook fala mais sobre pooling contínuo)
Me surpreendeu que o push não era recomendado para grande volume de eventos, e descobri que as implementações de RabbitMQ que eu fiz em projetos pessoais, anotando um método com @RabbitListener, utilizavam o modelo de consumo push
Olá Arthur. Fico feliz que captou a mensagem.
Além disso, uma app ou um microsserviço pode ser um produtor e consumidor, não necessariamente do mesmo tópico ou fila. Imagine um MS de order publicando um order-created e depois consumindo um evento de recebimento de pagamento, por exemplo.
Um evento de negócio é algo de relevante que ocorreu dentro do contexto/negócio do cliente, normalmente utilizamos tópicos, exatamente com a intenção de fazermos um broadcast para que todos os apps/serviços interessados possam receber e fazer o seu trabalho.
1 curtida