Salve, beleza? Continuamos essa saga aqui no Domain do Rendesign. Na última aula, nós criamos aqui a publicação dos eventos de integração, utilizando ainda o conceito de Transactional Outbox. Agora, a gente vai simular o consumo. Eu não vou fazer envio de e-mail aqui, mas a gente vai fazer aqui o consumo desse evento aqui na nossa aplicação de e-mail, simulando que é uma outra aplicação ou se a gente estivesse trabalhando tudo no mesmo contexto, mesmo assim ou melhor, dentro do mesmo contexto não se a gente estivesse trabalhando dentro do mesmo projeto mas são contextos de diferença ali dentro do mesmo projeto, a gente estaria mesmo assim usando o modo assíncrono, porque no caso do e-mail não teria grandes problemas. Então, nesse caso, para a gente poder fazer aqui a questão do ReptMQ, eu vou até fazer de forma mais simples, eu nem vou criar um módulo ali no e-mail, porque vai ser muito simples, eu só vou pegar a configuração que a gente tem aqui no RAPTMQ module, vou pegar essa configuração aqui vou passar ela pra cá aí aqui eu não preciso do export porque eu só vou ter esse módulo mesmo pra poder trabalhar e aqui eu posso importar o ReptMQModule, e aqui eu não preciso desse cara. Então, é mais simples. Só importo o da biblioteca, apontando aqui as mesmas configurações. Beleza. Aí, para a gente poder fazer o consumo aqui, nós vamos criar um serviço para consumir. Então, eu vou chegar aqui dentro vou criar um consumer.service ou melhor seria um consumer mesmo um consumer.ts acho que tá bom apesar que como ele vai ser um serviço do Nest, é bom colocar um ponto service aqui para deixar isso claro. Então, eu vou exportar uma classe, ConsumerService. Ela vai ter o decorator convencional do ReptMQ, ou melhor, do Nest, que é o injectable. Aí aqui nós vamos criar um método handle também, que vai receber a mensagem, que a gente não recebe o evento em si, mas a mensagem lá do RabbitMQ. E aqui em cima, vou usar o decorator RabbitMQ, ou melhor, o RabbitSubscribe, e a gente vai passar aqui qual é a Exchange que eu vou trabalhar aqui, a Direct, a RoutingKey, que vai ser aquela mesma que a gente tem lá no ReptMQ que a gente usou na aula passada. Vamos pegar aqui do Bind, vai ser essa mesma aqui, e a fila que já está criada. Mas o legal aqui dessa lib é que ela já afasta da criação. Se ela ver que não existe, ela já afasta da criação. Eu importei aqui, o que ele está chiando comigo? Importei o ReptimeQSubscribe, ele não está fazendo o alinhamento para mim coloquei vírgula vírgula deixa eu colocar as chaves aqui aí aqui pessoal, não vou fazer envio, etc, sem falar nada disso eu vou apenas fazer o consumo aqui da mensagem e mostrar ali no terminal que já está mais do que de bom tamanho. Esse tipo que eu vou colocar aqui, eu vou colocar ele como waning para a gente não depender em nada aqui da outra aplicação. Enfim, eu poderia criar um tipo aqui do evento que eu estou recebendo. Aí eu tenho que registrar esse Consumer Service para cá. Aqui está tudo beleza. Tem um detalhe que eu quero mudar aqui. Depois, se vocês quiserem fazer uma API aqui também no e-mails, eu vou mudar a porta porque a padrão nossa da aplicação principal é 3000 e aqui tem que ser 3001, né? Senão vai ter conflito de porta ali. Show de bola. Então a gente já tem a nossa aplicação rodando aqui, então eu vou colocar... Então, vou colocar events, adiciono mais um terminal e aqui e-mails. Então, aqui vai ser npm run start dev e a gente adiciona e-mails no final. Ele vai rodar somente a aplicação de e-mails. Vocês viram que ele já consumiu a mensagem? A mensagem estava paradinha lá na fila, então eu recebi todos os dados já pertinentes. Então, num cenário em que eu poderia estar ouvindo vários tipos de eventos diferentes, eu poderia... criar aqui uma... um bind com a MQTopic, colocando, às vezes, algo assim. Eu quero... Os eventos de integração, eles podem ter um prefixo. Isso seria bem interessante também. Imagina que... Onde que está? Aqui o nosso publicador. Na verdade, na hora que eu for publicar, pegando aqui como exemplo, eu poderia colocar assim, fullcycle.com barra... Melhor. exemplo poderia colocar assim fullcycle.com barra melhor event.fullcycle.com aí barra o nome do evento que nós estamos publicando poderia ter outra anotação também mas poderia ser Então eu poderia usar esse nome aqui no meu consumidor asterisco Deixa eu voltar isso aqui como estava, mas eu vou deixar comentado que vocês podem fazer isso aí, pegar o projeto e fazer no computador de vocês então eu poderia fazer esse cenário aqui nessa fila aqui eu vou receber todos os os eventos do domínio de eventos então uma vez que eu tenho aqui que eu sei que eu tenho pelo menos um event name e outras coisas que eu possa ter aqui eu acho que o que eu fiz aqui que eu esqueci poderia ser assim eu sei que eu recebo os outros dados também mas eu sei que eu tenho o event name lá então poderia ter um suite case com o um event name lá. Então, eu poderia ter um suite case com o message event name. E aí, caso seja um evento de integração, eu tenho aqui um serviço para poder lidar, um listener para poder lidar com ele. Caso seja um outro evento qualquer, eu vou lidando. Então, eu crio esse switch case aqui, então esse cara serve como um roteador, ele consome e repassa. A gente pode trabalhar com esse formato também, mas esse nome atribuído ao evento com um prefixo quando eu tenho vários subdomínios, ele é interessante para que eu saiba ali de onde veio esse cara. E também eu consigo pegar somente aqueles eventos específicos. Porque essa fila aqui poderia receber eventos de outros domínios também. Ou poderia criar uma outra fila de e-mails. Eu poderia colocar, ah, essa aqui vai receber só de eventos. Ah, isso eu quero receber eventos de outros lugares, eu poderia colocar essa aqui vai receber só de eventos. Aí se eu quero receber eventos de outros lugares, eu crio uma outra fila também. Aí vai do desenho, eu não vou discutir aqui como que a gente faria isso ou qual a melhor escolha, enfim, isso aí vai para uma outra discussão. Mas a gente poderia ter esse tipo de formato aqui no e-mail, mas a gente consegue consumir aqui os nossos eventos de integração e nós temos as duas aplicações se comunicando. Show de bola, pessoal. Então, vamos continuando aqui a nossa saga. É isso aí e até a próxima.