Mesmo eu não fazendo o projeto eu entendi tudo, e consigo desenrolar só por conta da experiência que já tenho com o ecossistema Spring. Enfim, parabéns Michelli sua didática é ótima. Abraço de um dev juninho aprimorando os conhecimentos, não tinha visto ainda sobre micro serviços e mensageria e o seu vídeo apareceu na hora certa.
Excelente trabalho, tudo ficou realmente muito bom ! A qualidade do vídeo, didática, áudio ficou limpa demais, merece os devidos parabéns porque com certeza deve dar uma trabalhadeira infinita pra produzir isso tudo exatamente desta forma. Esse foi meu primeiro contato com Microservices, falta muita coisa pela frente, mas pro inicio, esse vídeo com certeza foi muito importante. Se eu não estivesse atualmente desempregado, com certeza iria dar um apoio a mais pela sua dedição. Continue assim !
Sensacional, além de microserviços e comunicação assíncrona, mostrou como estruturar uma aplicação básica! Minha sugestão são vídeos voltados a patterns como SEDA, Sagas, Event Driven, etc! Parabéns, super recomendo, video aula melhor do que muitos cursos completos!
Parabéns pelo vídeo, Michelli. Até quem está iniciando em desenvolvimento de sistemas consegue ter pelo menos uma visão macro de como tudo funciona em relação a arquitetura de microserviços, mesmo que superficialmente. Fiquei com muitas dúvidas em relação às implementações dos componentes dos MSs, mas apenas por que ainda me faltam conhecimentos técnicos - principalmente em relaçãos às anotations e de como elas funcionam -, os quais pretendo aprofundar através dos seus outros vídeos. Sua didática em si é muito boa!
Muito bom o jeito que você explica, é envolvente! Eu também trabalho com Java e Spring com programação reativa, e curto ver novas maneiras de explicar os mesmos conceitos. A gente sempre vê alguma nuance que não tinha visto antes.
Estou começando a estudar microsserviços agora e a sua didática é excelente, o conteúdo não é simples mas com o seu fluxo de apresentação eu consigo ligar os pontos.
Comecei a acompanhar você pelo LinkedIn, é maravilhoso sua didática, nunca tinha mexido com Java antes, atualmente trabalho com frontend mas eu estou migrando para fullstack. E meus estudos é apenas na prática, espero acompanhar mais vídeos seu sobre java. Parabéns pelo conteúdo e didática!
Nossa, bom demais. Esse é daqueles videos que a gente salva pra ver depois, envia para os amigos, tenta dar like mais de uma vez. Completo, podemos construir qualquer coisa a partir disso, impressionante. Parabéns Michelli!
Parabens michelli por dar um show nas suas aulas , eu sou time .Net , mas adoro fazer comparativos de linguagens e suas firmas equivalentes de resolver problemas , conteúdo excelentíssimo 😊
Muito obrigado por disponibilizar um conteúdo como esse.... a qualidade dos vídeos e a riqueza de conteúdo me fazem querer chegar no seu patamar um dia..... Parabéns 👏👏🎉🎉
Adorei a aula Michelli, estou em transição de carreira em Backend...e suas dinâmicas e conceitos de ensinamentos são muito bons, conhecimento é pra vida toda..obrigado!!!
Boa noite Michelle, Parabéns pelo curso está me ajudando muito, no meu trabalho estou usando o Kafka, vc sabe um Jeito de usar o kafka igual vc usa o Rabbit sem instalar o docker na maquina?
Já agora, adiciono ao pedido o Keycloak para gerir isso tudo por nós e podermos simplesmente focar-nos a desenvolver o produto e não estar constantemente a reinventar a roda a gerir Users, Roles, Permissões, validações de tokens e etc.
até onde sei o finally é só um bloco que dever ser chamado independente do resultado. tipo dando erro ou não, eu quero que retorne o código da operação
@@clone9550 finally não deve ser usado pra retornar alguma coisa, deve ser usado somente pra "limpar" alguma operação, fechar conexão, etc... E no contexto do tutorial, o finally é desnecessário, já que mesmo com erro, a gente vai salvar o email de qualquer forma. O correto no caso do vídeo é remover o finally e retornar o repository.save(email) fora do try/catch, por exemplo.
Por que instanciou um UserModel no controller? Não seria ideal mandar o Dto para a camada de service e lá criar a entidade(userModel) mapeada do Dto? Sei que a intenção principal do vídeo é a comunicação entre os microservices mas fiquei com esta dúvida.
Fala mano, beleza?? Na minha visão o motivo de instanciar o UserModel no Controller é por uma questão de simplificação e foco na comunicação, além de ser um tipo de projeto simples: Simplificação: O controller realiza a conversão e chama o serviço apenas com a entidade pronta, o que simplifica a lógica do serviço. Comunicação: Se a principal responsabilidade do controlador é lidar com a comunicação entre o cliente e o serviço, ele pode realizar a conversão para a entidade. Passar o DTO para a camada de serviço: Responsabilidade clara: A conversão do DTO para a entidade ocorre na camada de serviço, que é responsável pela lógica de negócio e pela preparação dos dados para persistência. Flexibilidade: Permite que a camada de serviço tenha mais controle sobre como os dados do DTO são convertidos e manipulados antes de serem persistidos. Se for pensar em arquitetura onde a responsabilidade de conversão é clara, creio que faça mais sentido mesmo passar o DTO para a camada de serviço, creio ser até o mais comum pensando em projetos complexos. Mas para esse caso atual do video, não diria que tem certo ou errado.
uma dúvida, caso eu não queria instalar o postgres e queria usar docker, como que ficaria o compose dessa aplicação? eu teria que fazer um container para cada um dos MS ou eu poderia usar apenas um arquivo compose para criar os dois?
Oi, Michelli! Muito obrigado pelo tutorial! Eu estava seguindo ele e percebi que nesse momento 1:31:10, enquanto a sua mensagem estava chegando no RabbitMq com o content_type de application/json, a minha estava chegando como application/x-java-serialized-object, e quando subo o servidor do email, recebo a mensagem de erro de que o Jackson2JsonMessageConverter não conseguiu converter ele para de java-serialized-object para json. Nesse caso, o que eu deveria fazer para garantir que sempre que essa mensagem for para o RabbitMq ela vá como json?
Eu mesmo respondo: Ao invés de usar uma classe tradicional, usei um record. Funcionou do mesmo jeito. public record EmailDto( UUID userId, String emailTo, String subject, String text) { } Claro que tive que mudar o método na classe UserProducer, para popular o dto: // Método para converter e enviar a mensagem: public void publishMessageEmail(UserModel userModel) { // Preencher os dados do emailDto com os dados do userModel: String subject = "Cadastro realizado com sucesso!"; String text = userModel.getName() + ", seja bem vindo(a)! " + "Agradecemos o seu cadastro, aproveite agora" + " todos os recursos da nossa plataforma!"; var emailDto = new EmailDto( userModel.getUserId(), userModel.getEmail(), subject, text ); rabbitTemplate.convertAndSend("", routingKey, emailDto); }
É possível criar um producer que irá pedir informação da base de dados de outro microserviço? E o consumer do respetivo micro serviço enviar essa informação?
52:12 O meu n da um erro mas tmb n cria as tabelas, eu estou utilizando o MySQL... O que eu observei de diferente no TomCat seria: main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) e o unico que deu warn foi: JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning Alguém sabe se isso seria o problema ? Nos properties está tudo certo
alguem pode me ajudar? n quero baixar nenhuma IDE e to fazendo pelo VS code, sei q pode ser uma das melhores praticas, mas meu pc já n é dos melhores, enfim, o VS code n entende quando chega na parte do broker, ele dá: "'broker.queue.email.name' is an unknown property.vscode-spring-boot(PROP_UNKNOWN_PROPERTY)"
Estou recebendo esse erro no último passo, na hora de enviar o email pro Gmail: Failed message 1: jakarta.mail.MessagingException: can't determine local email address. Fica na Linha 43 do EmailService.java.
Pessoal, segue aqui o link do código no Github: github.com/MichelliBrito/microservices-na-pratica
nossa incrivel como o youtube consegue esconder conteudo tão bom e recomendar apenas coisas lastimaveis, enfim, que bom que encontrei esse canal
Mesmo eu não fazendo o projeto eu entendi tudo, e consigo desenrolar só por conta da experiência que já tenho com o ecossistema Spring. Enfim, parabéns Michelli sua didática é ótima. Abraço de um dev juninho aprimorando os conhecimentos, não tinha visto ainda sobre micro serviços e mensageria e o seu vídeo apareceu na hora certa.
Excelente trabalho, tudo ficou realmente muito bom !
A qualidade do vídeo, didática, áudio ficou limpa demais, merece os devidos parabéns porque com certeza deve dar uma trabalhadeira infinita pra produzir isso tudo exatamente desta forma.
Esse foi meu primeiro contato com Microservices, falta muita coisa pela frente, mas pro inicio, esse vídeo com certeza foi muito importante.
Se eu não estivesse atualmente desempregado, com certeza iria dar um apoio a mais pela sua dedição.
Continue assim !
Fui acompanhando devagarinho e consegui criar tudo do zero. Muito obrigada
Sensacional, além de microserviços e comunicação assíncrona, mostrou como estruturar uma aplicação básica! Minha sugestão são vídeos voltados a patterns como SEDA, Sagas, Event Driven, etc! Parabéns, super recomendo, video aula melhor do que muitos cursos completos!
vc tem todo conteudo que eu preciso isso é incrivel
Parabéns pelo vídeo, Michelli. Até quem está iniciando em desenvolvimento de sistemas consegue ter pelo menos uma visão macro de como tudo funciona em relação a arquitetura de microserviços, mesmo que superficialmente. Fiquei com muitas dúvidas em relação às implementações dos componentes dos MSs, mas apenas por que ainda me faltam conhecimentos técnicos - principalmente em relaçãos às anotations e de como elas funcionam -, os quais pretendo aprofundar através dos seus outros vídeos. Sua didática em si é muito boa!
Muito bom o jeito que você explica, é envolvente! Eu também trabalho com Java e Spring com programação reativa, e curto ver novas maneiras de explicar os mesmos conceitos. A gente sempre vê alguma nuance que não tinha visto antes.
Nao assisti a aula toda mas com öoucos minutos deu pra perceber que tem muita propriedade no assunto. Parabens !
Adorei o vídeo, deu pra entender muito bem o fluxo de como um microsserviço funciona
Estou começando a estudar microsserviços agora e a sua didática é excelente, o conteúdo não é simples mas com o seu fluxo de apresentação eu consigo ligar os pontos.
muito bom parabéns.
Legal estou estudando outra linguagem mas é interessante ver alguém consolidado na área dando dicas. Obrigado!!
Muito obrigado pela sua didática incrível.
Iniciei um projeto pessoal com java e arquitetura de microservices e seu vídeo me ajudou demais. S3
Eu decidi que ia começar a estudar microservices hj e logo hoje você lança esse vídeo. Muito obrigado!
Comecei a acompanhar você pelo LinkedIn, é maravilhoso sua didática, nunca tinha mexido com Java antes, atualmente trabalho com frontend mas eu estou migrando para fullstack. E meus estudos é apenas na prática, espero acompanhar mais vídeos seu sobre java. Parabéns pelo conteúdo e didática!
Nossa, bom demais. Esse é daqueles videos que a gente salva pra ver depois, envia para os amigos, tenta dar like mais de uma vez. Completo, podemos construir qualquer coisa a partir disso, impressionante. Parabéns Michelli!
Michelli é a rainha do microservices. Brabíssima!
Eu entro em qualquer vídeo da Michelli dando like! Conteúdo espetacular!
esse canal é realmente um achado, conteúdo incrível!
Parabens michelli por dar um show nas suas aulas , eu sou time .Net , mas adoro fazer comparativos de linguagens e suas firmas equivalentes de resolver problemas , conteúdo excelentíssimo 😊
fiz com java 21 e deu certinho. show
Muito obrigado por disponibilizar um conteúdo como esse.... a qualidade dos vídeos e a riqueza de conteúdo me fazem querer chegar no seu patamar um dia..... Parabéns 👏👏🎉🎉
Estou aprendendo muito contigo Michelli, conteúdo de extrema qualidade
Adorei a aula Michelli, estou em transição de carreira em Backend...e suas dinâmicas e conceitos de ensinamentos são muito bons, conhecimento é pra vida toda..obrigado!!!
Teu canal é maravilhoso, Michelli! Obrigada por compartilhar todo o teu conhecimento conosco!
Excelente aula professora, muito obrigado por compartilhar esse conteúdo de grande valia!
Excelente video, mas videos sobre microservicios por favor 💯💯💯
Boa noite Michelle, Parabéns pelo curso está me ajudando muito, no meu trabalho estou usando o Kafka, vc sabe um Jeito de usar o kafka igual vc usa o Rabbit sem instalar o docker na maquina?
Michelli sempre trazendo conteúdo de muita qualidade para nós, parabéns!
Faz uma aula de autenticação completa com JWT, RefreshToken e permissões!
Já agora, adiciono ao pedido o Keycloak para gerir isso tudo por nós e podermos simplesmente focar-nos a desenvolver o produto e não estar constantemente a reinventar a roda a gerir Users, Roles, Permissões, validações de tokens e etc.
@@AntonioCabralNumberOne O prime do negocio está nisso... praticamente a aula de JWT é isso, se não for pra ter isso deixa essa aula assim mesmo
Para facilitar poderia usar uma infra com docker-compose, com o postgres e RabbitMQ
Excelente ensinamento Michelli, parabéns!!
Muito obrigado, as aulas ajuda d+....
Estou fazendo um projeto spring com Kotlin, vai ser bom pegar uma visão e ver algumas diferenças de como fica com java
Que top! Estava procurando exatamente isso..
Muito obrigado pelo conteúdo!
Parabéns pelo conteúdo!
Que perfeição de vídeo!!!
Que perfeito ! Parabéns.
Que aula TOP, na próxima faz com apache kafka
Outro dos seus vídeos excelentes.
#Parabéns
Seria interessante refazer esse tutorial, mas usando docker
Incrível seu canal. Ja me inscrevi
Ótimo vídeo, obrigada ! Michelli, você tem algum vídeo/projeto que fale sobre arquitetura hexagonal ?
que espetáculo!!!!!!!!!
Não se deve usar o bloco Finally para retornar algo. O bloco Finally serve para finalizar processos como por exemplo fechar uma conexão ao BD.
Quando usamos finally, ele deve está no contexto tanto no try quanto no catch! Deu try ou catch? Quando finaliza, vai direto para o finally!!
até onde sei o finally é só um bloco que dever ser chamado independente do resultado. tipo dando erro ou não, eu quero que retorne o código da operação
@@clone9550 finally não deve ser usado pra retornar alguma coisa, deve ser usado somente pra "limpar" alguma operação, fechar conexão, etc... E no contexto do tutorial, o finally é desnecessário, já que mesmo com erro, a gente vai salvar o email de qualquer forma. O correto no caso do vídeo é remover o finally e retornar o repository.save(email) fora do try/catch, por exemplo.
Por que instanciou um UserModel no controller? Não seria ideal mandar o Dto para a camada de service e lá criar a entidade(userModel) mapeada do Dto? Sei que a intenção principal do vídeo é a comunicação entre os microservices mas fiquei com esta dúvida.
Fala mano, beleza??
Na minha visão o motivo de instanciar o UserModel no Controller é por uma questão de simplificação e foco na comunicação, além de ser um tipo de projeto simples:
Simplificação: O controller realiza a conversão e chama o serviço apenas com a entidade pronta, o que simplifica a lógica do serviço.
Comunicação: Se a principal responsabilidade do controlador é lidar com a comunicação entre o cliente e o serviço, ele pode realizar a conversão para a entidade.
Passar o DTO para a camada de serviço:
Responsabilidade clara: A conversão do DTO para a entidade ocorre na camada de serviço, que é responsável pela lógica de negócio e pela preparação dos dados para persistência.
Flexibilidade: Permite que a camada de serviço tenha mais controle sobre como os dados do DTO são convertidos e manipulados antes de serem persistidos.
Se for pensar em arquitetura onde a responsabilidade de conversão é clara, creio que faça mais sentido mesmo passar o DTO para a camada de serviço, creio ser até o mais comum pensando em projetos complexos.
Mas para esse caso atual do video, não diria que tem certo ou errado.
Conteúdo muito bom😀
E hoje descobri como os e-mails chegam a mim após cadastros ♥️😹
Excelente.
Conteúdo top 🚀👌🏼
Ótima aula, parabéns! Gostaria de saber qual o programa que você utiliza para elaborar os cenários (flows)?
Quando vamos subir esse tipo de arquitetura para um servidor, usa o docker compose para subir o db e a aplicação??
muito bom, gostei
uma dúvida, caso eu não queria instalar o postgres e queria usar docker, como que ficaria o compose dessa aplicação? eu teria que fazer um container para cada um dos MS ou eu poderia usar apenas um arquivo compose para criar os dois?
Oi, Michelli! Muito obrigado pelo tutorial! Eu estava seguindo ele e percebi que nesse momento 1:31:10, enquanto a sua mensagem estava chegando no RabbitMq com o content_type de application/json, a minha estava chegando como application/x-java-serialized-object, e quando subo o servidor do email, recebo a mensagem de erro de que o Jackson2JsonMessageConverter não conseguiu converter ele para de java-serialized-object para json.
Nesse caso, o que eu deveria fazer para garantir que sempre que essa mensagem for para o RabbitMq ela vá como json?
Olá. Por que salvar o e-email no banco de dados?
muito bommmmmmmmmmmmm
Qual câmera você usa?
1:30:01
Bom tutorial, mas peca apenas por não ter Gateway nem usar Docker para containerizar os microserviços.
As minhas mensagens quando vão para o Rabbit estão indo para Unacked. Sabe me dizer se é normal? Poois está seguindo o fluxo normal até o envio.
@MichelliBrito Por que no microservice user, o EmailDto é uma classe normal, e não um record, como foi no microservice email ?
Eu mesmo respondo:
Ao invés de usar uma classe tradicional, usei um record. Funcionou do mesmo jeito.
public record EmailDto(
UUID userId,
String emailTo,
String subject,
String text) {
}
Claro que tive que mudar o método na classe UserProducer, para popular o dto:
// Método para converter e enviar a mensagem:
public void publishMessageEmail(UserModel userModel) {
// Preencher os dados do emailDto com os dados do userModel:
String subject = "Cadastro realizado com sucesso!";
String text = userModel.getName() + ", seja bem vindo(a)!
"
+ "Agradecemos o seu cadastro, aproveite agora"
+ " todos os recursos da nossa plataforma!";
var emailDto = new EmailDto(
userModel.getUserId(),
userModel.getEmail(),
subject,
text
);
rabbitTemplate.convertAndSend("", routingKey, emailDto);
}
public static void main(String args[]) {
boolean like = true;
while(like) {
system.out.println(👍🏻);
}
}
Qual o nome do software que usa para desenhar a arquitetura? Pf meu gato pediu
É possível criar um producer que irá pedir informação da base de dados de outro microserviço? E o consumer do respetivo micro serviço enviar essa informação?
52:12 O meu n da um erro mas tmb n cria as tabelas, eu estou utilizando o MySQL...
O que eu observei de diferente no TomCat seria:
main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
e o unico que deu warn foi:
JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
Alguém sabe se isso seria o problema ? Nos properties está tudo certo
Pessoal, alguem pode me ajudar, o dashboard do rabbiqt mudou, e não esta mais aparecendo esse link que ela copiou. Como eu faço para pegar esse link ?
To tendo um erro ao tentar conectar com o broker
não entendi pq o messageConverter precisa ser criado na classe de configuração, alguém poderia me explicar.
No momento estudo C# a irmã do Java hehe😂
alguem pode me ajudar? n quero baixar nenhuma IDE e to fazendo pelo VS code, sei q pode ser uma das melhores praticas, mas meu pc já n é dos melhores, enfim, o VS code n entende quando chega na parte do broker, ele dá: "'broker.queue.email.name' is an unknown property.vscode-spring-boot(PROP_UNKNOWN_PROPERTY)"
não é necessário fazer nada, ele roda de qqr forma
Estou recebendo esse erro no último passo, na hora de enviar o email pro Gmail: Failed message 1: jakarta.mail.MessagingException: can't determine local email address. Fica na Linha 43 do EmailService.java.