professor muito obrigado, no meu curso presencial estamos criando um sistema micro-service de gestão documental, meu professor do curso diga-se de passagem um arquiteto de software. pediu para mim, criar a mensageria do projeto eu estava sem rumo e na gambiarra com o chat gpt, até finalmente achar seu vídeo muito obrigado me ajudou e vai ajudar muito.
O rabbitMQ tem que melhorar a interface para conseguimos filtrar, quando a fila está pequena é de boa, mas se temos um volume considerável é horrível, além de não ordenar para aparecer o mais recente primeiro. Se alguém tiver alguma dica por favor compartilha :)
Parabéns pela aula muito esclarecedora, porém surgiu umas dúvidas o que aconteceria se o servidor rabbitmq estivesse offline? As mensagens enviadas durante esse período seriam perdidas? E como poderia implantar uma solução para esse cenário? Exemplo salvar em um banco de dados e assim que o servidor rabbitmq retornar ele ler e criar as mensagens Desde já agradeço
Olá Bruno, muito interessante sua pergunta, isso é uma preocupação real de muitas equipes. Existem algumas opções, você sim poderia salvar no banco de dados e criar essa rotina de reenvio das mensagens, mas, e quanto ao seu banco de dados, se ele cair? Tanto o banco de dados quanto o servidor de mensageria como o RabbitMQ, são serviços críticos que devem ter resiliência e redundância. O RabbitMQ por si só já é uma aplicação muito resiliente que suporta grandes cargas de processamento, consumindo recursos de forma moderada. Outra opção, seria que hoje existem muitos provedores como a AWS e CloudAmqp que servem serviços de mensageria auto gerenciáveis e escaláveis, dependente do projeto e escala da aplicação, esse tipo de provedor pode ser muito útil. Assim como existem serviços próprios para bancos de dados, AWS RDS por exemplo. Recomendo também uma solução de observabilidade, que gere alertas não quando os serviços caírem, mas quanto eles apresentarem cargas irregulares, que podem levar o serviço a uma queda.
@@algaworks boa noite obrigado pelo feedback Caso eu decida pela utilização de um banco de dados como solução poderia utilizar o Kafka connect para ligar os dados do banco com as filas do rabbitmq? Se sim qual a sua opinião sobre essa abordagem?
Poderia fazer um curso completo focado na arquitetura de micro serviços contemplando essa parte de mensageria, comunicações síncronas e assíncronas e todos os principais Design Pattern desta arquitetura e autenticação com JWT ou Outh 2, persistência de dados, logs e sem contar com deploy em Cloud. Poderiam pensar em começar a gravar um curso visando esta formação...
Olá mergulhador! Acredite, recebemos muitos pedidos como esse, já estamos nos aprofundando no assunto. Fique ligado aos nossos canais, acompanhe os conteúdos e nos ajude com sugestões do que gostaria de ver neste tipo de treinamento!
Muito bom o vídeo, mas fiquei com uma dúvida, quando usei o Kafka, os serviços consumidores conseguem recuperar uma mensagem mesmo que essa mensagem tenha sido produzida enquanto o serviço consumidor estava off por algum motivo, dessa forma assim que o serviço é restaurado ele se conecta com o Kafka e recupera a mensagem de um tópico na qual ele esta inscrito. Dito isso, como obter esse comportamento com o RabbitMQ? Parabéns pelo vídeo!
No RabbitMQ basta criar uma Queue que seja persistente, ou seja, uma que não seja removida assim que o consumidor for desligado. O produtor irá continuar enviando as mensagens para lá. Neste projeto da aula, foi criada uma Queue (fila) que é persistente, já que é a configuração padrão. Basta iniciar o consumidor uma vez, assim ele criará a Queue.
Perfeito! Muito obrigado. Acredito que, como é a configuração padrão não foi dado ênfase nessa funcionalidade neste vídeo. Bom saber que tem a mesma funcionalidade que o Kafka. Mais uma vez parabéns pelo vídeo!
Excelente aula, tenho 2 apis com spring boot que se conectam ao rabbitmq, a primeira cria um usuario e a segunda manda email, a de usuario é um procuder e a de email é um consumer, quando a procuder esta liagada no rabbit a mensagem chega na interface da mesma, mas quando o consumer esta ligado a mensagem chega no consumer mas não chega na interface do rabbit. o que pode ser ?
Olá mergulhador! Se a mensagem chega no Rabbit quando o consumer está desligado, mas quando o consumer está ligado ela não chega... Me parece que o consumer simplesmente está consumindo a mensagem rápido demais para que você possa vê-la na fila.
Olá ... parabéns pelo vídeo. Dúvida: em relação ao primeiro exemplo que você faz, não vi você fazendo a configuração da "ConnectionFactory". Procurei também no código no git, mas não encontrei. Esta configuração por conta de ter inicializado o Rabbit pelo Docker? Tentei reproduzir o código instalando Rabbit desktop, porém falta esta configuração. Obrigado.
Olá mergulhador! Você diz a ConnectionFactory para o RabbitMQ? Ela é toda feita pelo o Spring, sem a necessidade de configurar nada dentro do código Java. É tudo feito via YML: spring: rabbitmq: host: localhost port: 5672 username: rabbitmq password: rabbitmq
@@algaworks A ConnectionFactory seria do RabbitMQ sim. A minha eu configurei no application.properties: spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest ... ao debugar verifiquei que meu RabbitTemplate está dando java.lang.NullPointerException mesmo eu injetando ele. @Autowired private RabbitTemplate rabbitTemplate;
... e na classe de config ele está declarado: @Configuration public class RabbitMqConfig { @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter messageConverter) { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(messageConverter); return rabbitTemplate; } ... (tem as outras configurções) ... }
Meu pom para o RabbitMQ:
org.springframework.boot spring-boot-starter-amqp
Se aqui não for um canal para este tipo de dúvidas pode ficar tranquilo. Não precisa de responder. Obrigado.
Olá mergulhador, essa configuração está correta, não consegui localizar nenhum erro. Verifique se você consegue usar a injeção desse RabbitTemplate em outro lugar no código.
Opa .... obrigado por responder. Em qualquer lugar que tento utilizar a injeção do RabbitTemplate vem como null. Mas de qualquer forma agradeço pela atenção. Vlw
Uma dúvida uma aplicação pode ser um consumidor de uma fila que é produzido por outra aplicação e ao mesmo tempo ser produtora de mensagens para a fila que outra aplicação consome?
Olá mergulhador! Pode sim! Inclusive é algo comum, que as aplicações produzam mensagens e consumam mensagens de outras aplicações, ou até mesmo, mensagens produzidas por ela mesmo. Tudo irá variar conforme a necessidade e solução aplicada.
@@algaworks Seria muito bom se a plataforma fizesse um curso de microservice, utilizando RabbitMQ e Kafka. Muitas pessoas estão querendo e precisando de um curso assim
Prof eu tenho um serviço que produz uma notificação porém ele precisa saber se se no consumer a notificação foi enviada com sucesso, como eu deveria fazer ? O mesmo consumer produz na fila de resp-notificação por exemplo e o producer consumiria essa fila ?
Olá mergulhador! Isso mesmo, nesse caso a mensagem me parece mais um comando, como se um sistema fala-se ao outro: faça isso e me envie uma resposta confirmando. Logo, uma opção é ter outro tópico com as respostas.
Olá, tenho uma dúvida sobre o spring AMQP, ele seria apenas para trabalhar com RABBIT? mesmo na documentação dele, foi passado a implementação com rabbit. Teria como usar, por ex: spring amqp + kafka?
Olá Toshiro, o Spring AMQP é apenas para message brokers que trabalham com o protocolo AMQP, o RabbitMQ é um deles. Para trabalhar com o Kafka, você deve utilizar o Spring Kafka ou o Spring Cloud Stream (que também temos aula no canal) com o binder sendo o Kafka.
@@algaworks ah sim, é uma questão de protocolo então. E o rabbitmq é o mais famoso então faz sentido estar na doc oficial como exemplo, hehe. Muito obrigado.
como que faz para consumir uma mensagem especifica em uma fila com mil mensagens por exemplo, porem quero consumir uma pq ja li ela, e mandar ela para uma fila de mensagens ja lidas, e excluir ela apos 5 dias, por exemplo
Olá mergulhador! Muito interessante a pergunta, só não entendemos bem a real necessidade de consumir uma mensagem específica. É possível priorizar o processamento de uma mensagem, por exemplo, a mensagem de um cliente VIP. Agora sobre criar uma fila de mensagens já lidas, ao menos no RabbitMQ isso não faz sentido, já que o objetivo dele é apenas direcionar as mensagens, e não guardá-las para sempre. Utilize o banco de dados para guardar as mensagens.
Olá mergulhadora! Me parece um problema de encoding. Você está enviando essa String diretamente para a fila? Ou criou um objeto de mensagem, contendo informações como destinatários e conteúdo, e enviou como JSON? Nesse caso não deveria existir problema, geralmente é encodado como UTF8.
No intellij abra a pasta contendo os 3 projetos, geralmente a IDE avisa que achou projetos maven e da uma opção de carregar. Caso não aconteça, clique com botão direito no pom.xml de cada projeto, e procure a opção "add as a maven project".
Essa aula foi um show, continue compartilhando seu conhecimento, gostei da didática, parabéns!!
Muito bom, didático e fácil de entender. Parabéns!
Ótima aula, didático e fácil de entender. Parabéns!
Bem didático e simples de entender. Muito obrigado!!
Parabéns pelo vídeo, excelente explicação, todos os pontos importantes foram abordados para iniciar as aplicações utilizando RabbitMQ.
Obrigado mergulhador! Nós da equipe da AlgaWorks ficamos muito felizes que tenha gostado.
Não deixei de conferir as outras aulas do nosso canal!
Sem dúvidas melhor vídeo explicativo sobre o rabbitmq que vi até agora no youtube, parabéns!!
Ótimo didática! Parabéns
Muito bom. Esclareceu muitas dúvidas minhas.
Parabéns
Muito bom, parabéns, por favor lance mais videos de mensageiria, quase n encontramos videos assim, a nao ser na gringa
Eu procurando um tutorial sobre isso, e vocês fizeram fresquinho para mim.
Parabéns pela aula. Muito didática e esclarecedora.
Parabéns pelo conteúdo, muito explicativo e fácil de entender. 👏👏👏
professor muito obrigado, no meu curso presencial estamos criando um sistema micro-service de gestão documental, meu professor do curso diga-se de passagem um arquiteto de software. pediu para mim, criar a mensageria do projeto eu estava sem rumo e na gambiarra com o chat gpt, até finalmente achar seu vídeo muito obrigado me ajudou e vai ajudar muito.
Obrigado mergulhador!
Ficamos muito felizes que a aula tenha lhe ajudado a desenvolver o seu projeto.
Um abraço.
336 AMÉM p
Que aula, mano!!
Muito boa sua didática mano, obrigado pelo vídeo.
Obrigado mergulhador!
Não se esqueça de conferir as outras aulas e os nossos cursos!
Parabéns pelo video! Muito boa a explicação e implementação!
Conteudo fresco e completo!
melhor video que vi ate agora sobre o tema
Material de qualidade. Padrão AlgaWorks.
Excelente explicação
Excelente!!!
O rabbitMQ tem que melhorar a interface para conseguimos filtrar, quando a fila está pequena é de boa, mas se temos um volume considerável é horrível, além de não ordenar para aparecer o mais recente primeiro. Se alguém tiver alguma dica por favor compartilha :)
Vai sair um segundo vídeo com dlq e retry?
Parabéns pela ótima aula!
Olá mergulhador! Este é um assunto que já estamos estudando ;)
Parabéns pela aula muito esclarecedora, porém surgiu umas dúvidas o que aconteceria se o servidor rabbitmq estivesse offline? As mensagens enviadas durante esse período seriam perdidas? E como poderia implantar uma solução para esse cenário? Exemplo salvar em um banco de dados e assim que o servidor rabbitmq retornar ele ler e criar as mensagens
Desde já agradeço
Olá Bruno, muito interessante sua pergunta, isso é uma preocupação real de muitas equipes.
Existem algumas opções, você sim poderia salvar no banco de dados e criar essa rotina de reenvio das mensagens, mas, e quanto ao seu banco de dados, se ele cair?
Tanto o banco de dados quanto o servidor de mensageria como o RabbitMQ, são serviços críticos que devem ter resiliência e redundância.
O RabbitMQ por si só já é uma aplicação muito resiliente que suporta grandes cargas de processamento, consumindo recursos de forma moderada.
Outra opção, seria que hoje existem muitos provedores como a AWS e CloudAmqp que servem serviços de mensageria auto gerenciáveis e escaláveis, dependente do projeto e escala da aplicação, esse tipo de provedor pode ser muito útil.
Assim como existem serviços próprios para bancos de dados, AWS RDS por exemplo.
Recomendo também uma solução de observabilidade, que gere alertas não quando os serviços caírem, mas quanto eles apresentarem cargas irregulares, que podem levar o serviço a uma queda.
@@algaworks boa noite obrigado pelo feedback
Caso eu decida pela utilização de um banco de dados como solução poderia utilizar o Kafka connect para ligar os dados do banco com as filas do rabbitmq? Se sim qual a sua opinião sobre essa abordagem?
Olá Bruno, desconhecemos essa abordagem, mas vamos pesquisar sobre esse assunto, obrigado pelo comentário!
Poderia fazer um curso completo focado na arquitetura de micro serviços contemplando essa parte de mensageria, comunicações síncronas e assíncronas e todos os principais Design Pattern desta arquitetura e autenticação com JWT ou Outh 2, persistência de dados, logs e sem contar com deploy em Cloud. Poderiam pensar em começar a gravar um curso visando esta formação...
Olá mergulhador!
Acredite, recebemos muitos pedidos como esse, já estamos nos aprofundando no assunto.
Fique ligado aos nossos canais, acompanhe os conteúdos e nos ajude com sugestões do que gostaria de ver neste tipo de treinamento!
Muito bom o vídeo, mas fiquei com uma dúvida, quando usei o Kafka, os serviços consumidores conseguem recuperar uma mensagem mesmo que essa mensagem tenha sido produzida enquanto o serviço consumidor estava off por algum motivo, dessa forma assim que o serviço é restaurado ele se conecta com o Kafka e recupera a mensagem de um tópico na qual ele esta inscrito. Dito isso, como obter esse comportamento com o RabbitMQ? Parabéns pelo vídeo!
No RabbitMQ basta criar uma Queue que seja persistente, ou seja, uma que não seja removida assim que o consumidor for desligado.
O produtor irá continuar enviando as mensagens para lá. Neste projeto da aula, foi criada uma Queue (fila) que é persistente, já que é a configuração padrão.
Basta iniciar o consumidor uma vez, assim ele criará a Queue.
Perfeito! Muito obrigado. Acredito que, como é a configuração padrão não foi dado ênfase nessa funcionalidade neste vídeo. Bom saber que tem a mesma funcionalidade que o Kafka. Mais uma vez parabéns pelo vídeo!
melhor video hehe
muito bom
Excelente aula, tenho 2 apis com spring boot que se conectam ao rabbitmq, a primeira cria um usuario e a segunda manda email, a de usuario é um procuder e a de email é um consumer, quando a procuder esta liagada no rabbit a mensagem chega na interface da mesma, mas quando o consumer esta ligado a mensagem chega no consumer mas não chega na interface do rabbit. o que pode ser ?
Olá mergulhador! Se a mensagem chega no Rabbit quando o consumer está desligado, mas quando o consumer está ligado ela não chega... Me parece que o consumer simplesmente está consumindo a mensagem rápido demais para que você possa vê-la na fila.
Olá ... parabéns pelo vídeo.
Dúvida: em relação ao primeiro exemplo que você faz, não vi você fazendo a configuração da "ConnectionFactory". Procurei também no código no git, mas não encontrei. Esta configuração por conta de ter inicializado o Rabbit pelo Docker? Tentei reproduzir o código instalando Rabbit desktop, porém falta esta configuração. Obrigado.
Olá mergulhador!
Você diz a ConnectionFactory para o RabbitMQ? Ela é toda feita pelo o Spring, sem a necessidade de configurar nada dentro do código Java. É tudo feito via YML:
spring:
rabbitmq:
host: localhost
port: 5672
username: rabbitmq
password: rabbitmq
@@algaworks
A ConnectionFactory seria do RabbitMQ sim. A minha eu configurei no application.properties:
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
... ao debugar verifiquei que meu RabbitTemplate está dando java.lang.NullPointerException mesmo eu injetando ele.
@Autowired
private RabbitTemplate rabbitTemplate;
... e na classe de config ele está declarado:
@Configuration
public class RabbitMqConfig {
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter messageConverter) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(messageConverter);
return rabbitTemplate;
}
... (tem as outras configurções) ...
}
Meu pom para o RabbitMQ:
org.springframework.boot
spring-boot-starter-amqp
Se aqui não for um canal para este tipo de dúvidas pode ficar tranquilo. Não precisa de responder. Obrigado.
Olá mergulhador, essa configuração está correta, não consegui localizar nenhum erro.
Verifique se você consegue usar a injeção desse RabbitTemplate em outro lugar no código.
Opa .... obrigado por responder.
Em qualquer lugar que tento utilizar a injeção do RabbitTemplate vem como null.
Mas de qualquer forma agradeço pela atenção. Vlw
Uma dúvida uma aplicação pode ser um consumidor de uma fila que é produzido por outra aplicação e ao mesmo tempo ser produtora de mensagens para a fila que outra aplicação consome?
Olá mergulhador!
Pode sim! Inclusive é algo comum, que as aplicações produzam mensagens e consumam mensagens de outras aplicações, ou até mesmo, mensagens produzidas por ela mesmo.
Tudo irá variar conforme a necessidade e solução aplicada.
Boa tarde, tudo bem? vcs tem algum curso de rabbitmq com spring boot?
Olá Tiago, não temos um curso, mas temos diversas aulas grátis no nosso canal, como essa.
@@algaworks Seria muito bom se a plataforma fizesse um curso de microservice, utilizando RabbitMQ e Kafka. Muitas pessoas estão querendo e precisando de um curso assim
Prof eu tenho um serviço que produz uma notificação porém ele precisa saber se se no consumer a notificação foi enviada com sucesso, como eu deveria fazer ?
O mesmo consumer produz na fila de resp-notificação por exemplo e o producer consumiria essa fila ?
Olá mergulhador!
Isso mesmo, nesse caso a mensagem me parece mais um comando, como se um sistema fala-se ao outro: faça isso e me envie uma resposta confirmando.
Logo, uma opção é ter outro tópico com as respostas.
Olá, tenho uma dúvida sobre o spring AMQP, ele seria apenas para trabalhar com RABBIT? mesmo na documentação dele, foi passado a implementação com rabbit. Teria como usar, por ex: spring amqp + kafka?
Olá Toshiro, o Spring AMQP é apenas para message brokers que trabalham com o protocolo AMQP, o RabbitMQ é um deles.
Para trabalhar com o Kafka, você deve utilizar o Spring Kafka ou o Spring Cloud Stream (que também temos aula no canal) com o binder sendo o Kafka.
@@algaworks ah sim, é uma questão de protocolo então. E o rabbitmq é o mais famoso então faz sentido estar na doc oficial como exemplo, hehe. Muito obrigado.
como que faz para consumir uma mensagem especifica em uma fila com mil mensagens por exemplo, porem quero consumir uma pq ja li ela, e mandar ela para uma fila de mensagens ja lidas, e excluir ela apos 5 dias, por exemplo
Olá mergulhador! Muito interessante a pergunta, só não entendemos bem a real necessidade de consumir uma mensagem específica.
É possível priorizar o processamento de uma mensagem, por exemplo, a mensagem de um cliente VIP.
Agora sobre criar uma fila de mensagens já lidas, ao menos no RabbitMQ isso não faz sentido, já que o objetivo dele é apenas direcionar as mensagens, e não guardá-las para sempre. Utilize o banco de dados para guardar as mensagens.
o cara fala igual do que o outro 😁
Igual ao Thiago? 😁
@@algaworks sim RS se você foi aluno dele acho que pegou dele kkk pegou até o fera que é Thiago 😁
Eu estou tentando enviar uma mensagem de texto , até envio o e-mail tudo direitinho .
Mas os acentos vão todos estranhos.
Tem como arrumar isso ! ?
Olá mergulhadora! Me parece um problema de encoding.
Você está enviando essa String diretamente para a fila?
Ou criou um objeto de mensagem, contendo informações como destinatários e conteúdo, e enviou como JSON? Nesse caso não deveria existir problema, geralmente é encodado como UTF8.
como faz para criar e abrir 3 projeto igual no video
No intellij abra a pasta contendo os 3 projetos, geralmente a IDE avisa que achou projetos maven e da uma opção de carregar.
Caso não aconteça, clique com botão direito no pom.xml de cada projeto, e procure a opção "add as a maven project".