O Message Broker Open Source mais usado do mercado.
Como um Message Broker o RabbitMQ assume o papel de guardião e controlador das suas mensagens.
RabbitMQ ajuda a explorar toda a capacidade de projetos .NET.
Com ele conseguimos adicionar disponibilidade, eficiência, resiliência, confiabilidade e até escalabilidade.
Normalmente um projeto pequeno consegue extrair 2 ou 3 dessas capacidades, enquanto projetos maiores desenhados para a escala conseguem extrair os 5 benefícios.
Mas tudo tem um preço.
A chave para o sucesso com RabbitMQ depende de saber como apertar cada parafuso.
RabbitMQ pode ser configurado de diversas formas, para cada mensagem, para cada fila, para cada publicação, para cada consumo. Portanto se você não está se preocupando (ou ocupando seu tempo) lidando com esses detalhes, há poucas ou até nenhuma chance de estar obtendo esses benefícios.
E pior, você sequer sabe disso.
Se não existe decisão técnica certa 100% do tempo, não é possível que uma library esteja certa sem delegar para você a escolha de quando habilitar ou desabilitar controles.
Assim é fácil afirmar abstrações genérica te induzem ou ao uso de excessivo de recursos, ou à fragilidade e risco.
Por isso você não verá aqui recomendações sobre MassTransit, EasyNetQ e afins use por sua conta e risco.
Vídeos & Lives
Ao longo dos últimos anos produzi bastante conteúdo e conteúdo bem denso
Novo por aqui?
Comece por essa série de posts que irão te ajudar a entender mensageria com RabbitMQ.
O conteúdo aqui é 100% direcionado ao público que trabalha com C# e .NET.
Então se você consegue ler e entender C#, esse é um bom lugar para começar seus estudos, mesmo que não seja sua principal linguagem.
Fique por dentro
Ao longo da última década eu conduzi a maior produção de conteúdo sobre RabbitMQ do Brasil.
Ao longo dos últimos 4 anos tenho trabalhado na maior formação no assunto!!
RabbitMQ é um projeto Open Source incrível, ele me ajudou dezenas de vezes a lidar com os cenários dos mais adversos dos projetos mais diversos.
Projetos grandes, projetos pequenos, projetos fracassados em recuperação, ou projetos em construção.
Mas inevitavelmente RabbitMQ é subestimado por otimistas e pessimistas:
É mais simples do que os pessimistas pensam
e mais complexo do que os otimistas imaginam.
A capacidade de entregar resultado em projetos de todos os tamanhos é sem igual.
A dramática maioria pensa apenas em escalabilidade, um poder incrível para projetos grandes, mas mensageria com RabbitMQ te dá:
- Resiliência
- Disponibilidade
- Eficiência
- Confiabilidade
- Escalabilidade
E esses resultados, quando obtidos em projetos pequenos, mostra a versatilidade da solução.
Quando me perguntam se vale a pena, mostro essa lista e pergunto:
– Você precisa de algum desses benefícios? Um único? Qualquer um da lista?
Se sim, teu projeto é um forte candidato à adoção de RabbitMQ. Todos os demais 4 benefícios vêm de brinde!
Inscreva-se para saber mais sobre mensageria e RabbbitMQ em projetos .NET
Precisa de ajuda em seu projeto com RabbitMQ?
Há uma forma em que nós trabalhamos juntos no seu projeto!Funciona assim:
No Mensageria .NET , você tem acesso ao conteúdo das aulas gravadas de RabbitMQ com .NET.
No grupo do telegram, eu ajudo você com qualquer dúvida, conceitual ou técnica relativa à projetos .NET com RabbitMQ.
Nas mentorias, 1 por mês, via Zoom, nós nos reunimos para também tirar dúvidas e usar outros meios como whiteboard ou mostrar código, em um formato de review, mentoria, e reunião.
Dessa forma indiretamente eu consigo te ajudar e trabalhar com você no seu projeto.
Curso + Grupo + Mentoria Mensal + GitHub = Sucesso!
O Mensageria .NET – RabbitMQ para Aplicações .NET é desenhado para desenvolvedores .NET que querem aprender minhas técnicas para usar RabbitMQ como mecanismo para entregar:
- Alta disponibilidade
- Eficiência no consumo de recursos de infra
- Resiliência
- Confiabilidade
- Escalabilidade
Algum desses assuntos parece familiar?
Mensageria está no centro da discussão sobre Microsserviços.
Publicações
Meus posts sobre RabbitMQ e Mensageria
Mensageria .NET for Architects Day | Sábado, 05 de outubro
Nesse sábado vai rolar o Mensageria .NET for Architects Day, um evento que gostaria de ter realizado há muito tempo! Mensageria não é disruptivo apenas pela natureza assíncrona. Tampouco pela lavagem cerebral que sofremos ao aprendermos a programar, que nos faz...
Oragon.RabbitMQ – A relação entre Minimal API’s e Agnostic Services
Oragon.RabbitMQ está no forno! Dando continuidade à nossa série, abordarei a ideia central pelo qual adoto Minimal API's e por que elas tem tanto poder na modelagem. É hora de abrir a caixa de pandora e falar sobre modelagem de API's agnósticas. Contexto Quando...
Oragon.RabbitMQ – A relação entre Ack e Resiliência
Oragon.RabbitMQ está no forno! Hoje começamos uma série que trata dos argumentos para a criação desse projeto. Começamos pela relação entre a escolha entre Ack Manual e Ack Automático e por que ack automático remove o benefício da resiliência no consumo de mensagens...
.NET ASPIRE Dashboard Standalone como Container
Nessa sexta-feira dia 16 foi lançado o Dashboard do ASPIRE como uma implementação OTLP standalone, em uma imagem docker, pronta para uso. Entenda as novidades nesse post. Novidade no .NET ASPIRE, habemus dashboard para todos! Ontem, dia 16, David Fowler postou uma...
RabbitMQ e .NET – Usar ou não usar bibliotecas?
Nesse post detalho meus argumentos para que você não use nenhuma abstração e use o cliente nativo do RabbitMQ feito para .NET. Contexto RabbitMQ é o Message Broker mais usado do mercado, uma solução open source e amplamente difundida. O projeto adota AMQP 0.9.X...
Filas exclusivas e autodelete
Nem sempre as demandas exigem filas que durem aos restarts da sua aplicação. Há casos de uso significativos em que você quer que a fila nasça com a instância da sua aplicação e morra junto com ela. Embora seja um conceito trivial, em mais de 10 anos usando RabbitMQ,...
10 anos com RabbitMQ — O que aprendi sobre – parte 1
Uma das ferramentas que mudou minha carreira foi sem dúvidas o RabbitMQ. RabbitMQ, embora tenha Coelho no nome, se comporta mais como um cavalo selvagem e arisco. Mensageria, Aplicações assíncronas e Aplicações distribuídas são mais complexas, mas dão um poder que...
RabbitMQ Clustering #6 | Formas de Configurar um cluster
Agora vou te dar algumas estratégias diferentes para a construção do Cluster. Uma estática, outra baseada em peer discovery. Aí podemos usar K8S, Etcd, Consul ou o próprio EC2. No post passado No post passado eu falei sobre a quantidade ideal de nós de um cluster....
RabbitMQ Clustering #5 | Projetando para disponibilidade
Se você sabe que precisa de um cluster, então é hora de pensar em como desenhar esse projeto. No post 2 dessa série(As 2 métricas vitais para o RabbitMQ), abordamos as métricas que fazem o RabbitMQ cair. Já no post 3 (RabbitMQ consome muita memória e disco?) falamos...
RabbitMQ Clustering #4 | Como as mensagens são persistidas
RabbitMQ é um excelente aliado na hora de entregar alta disponibilidade, resiliência, confiabilidade, eficiência e escalabilidade. Mas não basta subir uma instância, e sair usando de qualquer forma. Um dos cenários mais comuns que já esbarrei em consultorias ou na...
RabbitMQ Clustering #3 | RabbitMQ consome muita memória e disco?
Será que o RabbitMQ consome demais? Se você pensava que ele consumia muita memória, está enganado. Ele só deixa em memória as mensagens que ele pretende entregar mais cedo para os consumidores. Então depende diretamente do throughput. Ele vai tentar balancear para não...
RabbitMQ Clustering #2 | As 2 métricas vitais para o RabbitMQ
Se você usa RabbitMQ ou pretende usar, é importante saber o que é um ofensor para seu deployment RabbitMQ. Aquilo que fará seu servidor RabbitMQ parar. Aqui apresento 2 métricas que ajudam a prever e prevenir quedas. Acredito que a primeira dúvida que paire sob sua...
RabbitMQ Clustering #1
Você já deve ter visto que o RabbitMQ é usado para entregar resiliência, disponibilidade e confiabilidade. Eu já mostrei isso algumas vezes nos últimos anos. Talvez já tenha descoberto como pode reduzir a pressão de um volume intenso de trabalho sob seus sistemas, sua...
RabbitMQ – Trabalha em memória?
Já não é tão comum, mas ainda existe quem diga que RabbitMQ é rápido porque não tem banco de dados. Essa é uma MEN-TI-RA!! Ele entrega resiliência e performance, por outros motivos. É sobre isso que vamos falar hoje! Essa semana recebi uma mensagem que dizia algo...
RabbitMQ Operators | RabbitMQ Messaging Topology Operator for Kubernetes – Tutorial PT-BR
No último post sobre Operators, eu falei sobre o RabbitMQ Cluster Operator for Kubernetes, o papel dele é construir um cluster. Uma vez que o cluster está ativo e em operação, é hora de começar a usar esse cluster. Virtual Host, Exchanges, Filas e Binds, afinal quem e...
RabbitMQ Operators | RabbitMQ Cluster Operator for Kubernetes – Tutorial PT-BR
E se eu dissesse para você que você pode, com apenas 1 comando, criar um cluster RabbitMQ dentro do seu Kubernetes, de forma segura e prática? Hoje é a vez de criarmos o seu cluster RabbitMQ com a ajuda do RabbitMQ Cluster Operator for Kubernetes. Se você chegou até...
RabbitMQ Operators | Entendendo Kubernetes Operators
Embora não seja comum ver conteúdo sobre o assunto, Operators está no coração do Kubernetes e esse definitivamente é um dos temas mais legais na minha opinião no que diz respeito ao projeto. Nessa série composta por 3 posts, vamos abordar step-by-step os 2 operators...
RabbitMQ, .NET, OpenTelemetry, Distributed Tracing, Jaeger, Prometheus e Grafana
Parece sopa de letrinhas aleatórias né? Mas isso fez algum sentido para você, e achou legal, deixa eu te contar o que fizemos aqui do lado de dentro. Uma das demandas que tenho no curso de RabbitMQ para Aplicações .NET, é trazer conforto e clareza sobre o...
RabbitMQ | Eficiência | Como jogar dinheiro fora, case da Digital Ocean
A Digital Ocean é um Cloud Provider famoso e muito usado no mundo todo, mas nem por isso deixaram de cometer o amadorismo de usar bancos de dados como filas. E pior, para atender um throughput pífio! Conclusão: Mesmo sendo owners de infraestrutura, ou seja, com...
Event Driven Or Not? Quando usar Event Driven e quando usar só usar mensageria
Sempre que somos tocados por algum tipo de desenho ou arquitetura que demonstra significativo ganho em um determinado cenário, tendemos a tentar reaproveitar esse mesmo desenho mais pela memória do sucesso passado, do que pela necessidade efetivamente. Aqui está uma...
RPC sob AMQP seduz enquanto mata… sua implantação de mensageria
Se você viu meu último post e se animou por acreditar que usar RPC sob AMQP seja uma ideia incrível, calma que lá vem um balde de água fria! Com toda certeza eu não vou falar bem da abordagem! E se você resolveu que não vai ler, e ainda vai adotar RPC sob AMQP assim...
Messaging Patterns: RPC – Remote Procedure Call
RPC pode parecer sofisticado demais, mas que tal Request/Response? Agora "SOA" familiar? Nem só de total assincronismo vive o mundo da mensageria, há momentos em que precisamos de uma resposta. RPC é a forma mais prática de adotar mensageria, mas é preciso entender as...
Resiliência: Polly vs RabbitMQ
Fato que eu adoro essas comparações inusitadas! A intenção desse post é poder trazer de forma consistente uma visão que ajude a trazer clareza, e me permita também referenciar um conteúdo mais estruturado em vez de ter de construir toda uma argumentação em locais que...
RabbitMQ Streams com TypeScript e NodeJS
Em Julho o RabbitMQ ganhou suporte a Streams. De um lado aproxima o RabbitMQ do Kafka já que possui a mesma estrutura de dados, mas por outra ótica se isola completamente sendo provavelmente o único produto da categoria com suporte a ambos. Mas você sabia que a...
Mensageria já existia quando Jesus nasceu…
Até hoje eu consigo me surpreender com quão "novo" é o conceito de filas e troca de mensagens assíncronas para programadores. Hoje eu vou mostrar como esse conceito já está presente na nossa sociedade desde antes do nascimento de Jesus Cristo e você não percebeu...
EDA – Event Driven Architecture: Não confunda eventos com comandos
A diferenciação entre eventos e comandos foi um tema discutido dentro do grupo de arquitetura do Docker Definitivo, e como um tema que gera confusão e ceticismo em alguns aspectos, é hora da gente sair da discussão sobre a parte visível desse iceberg e aprofundarmos...
RabbitMQ e Kubernetes | Rivais ou Aliados?
Se, ambos, RabbitMQ e Kubernetes promovem um melhor uso de sua infraestrutura, trazem resiliência, escalabilidade, performance, será que eles não seriam concorrentes? Como eles concorrem? Eles podem colaborar? Entendendo o papel de cada um RabbitMQ RabbitMQ é um...
RabbitMQ é Resiliente? [video]
Será que o RabbitMQ de fato é seguro? O que acontece quando ele cai? O que acontece se minha aplicação cai? Será que o RabbitMQ persiste os dados no disco? Ou o RabbitMQ trabalha somente com dados em memória? Todas essas perguntas são pertinentes, e vou abordá-las...
Streams no RabbitMQ
Uma novidade que vai deixar aqueles que ficavam comparando RabbitMQ e Kafka mais perdidos ainda. No dia 9 de julho saiu um o RabbitMQ 3.9.0 RC que conta com suporte a Streams. A comparação direta era descabida até então: Enquanto o Kafka trabalha com streams o...
Entendendo RabbitMQ #2 – Caso de Estudo – Envio de Emails
Essa segunda série de posts sobre RabbitMQ visa mostrar como podemos usar RabbitMQ em cenários que não demandam escala. É para explodir a cabeça de quem diz que RabbitMQ é um canhão para matar uma formiga. Na série anterior eu abordei em mais de 11 posts sobre...
Entendendo RabbitMQ #1 – Reduzindo e/ou Eliminando Acoplamento
Ao esbarrar com uma nova tecnologia, você pode se perguntar: Será que é para mim? Com RabbitMQ não é diferente. Mas será que RabbitMQ é para o teu projeto? Nesse post eu vou mostrar minha visão sobre esse questionamento, mostrando os benefícios e quais são os dilemas...
Enterprise Application Log v4
Hoje chegamos à versão 4 do nosso stack de observabilidade. Contamos com o upgrade para a versão 7.13.0 de todos os recursos da Elastic e a adição de novos componentes entre eles o Application Performance Monitoring (APM). Motivador Monitoramento sempre foi um...
EasyNetQ em perspectiva
Abstrações são desenhadas para resolver problemas e abstrair um ou mais aspectos de uma implementação. Uma abstração pode entregar redução de complexidade, maior coesão, configuração facilitada, adaptação e até mesmo suprimir aquilo que não nos é relevante quando um...
Hub de Eventos
Na quinta-feira, dia 18/Março/2021 vamos falar do Hub de eventos que produzi para atender uma demanda particular. Eu não precisava de extrema performance e redundância, mas e se precisasse? Um assunto que eu estava abordando em Janeiro era o Hub, que agora vira...
RabbitMQ – Guia de Estudo Gratuito 2021
RabbitMQ é simples e incrível. São apenas 4 componentes. Relativamente simples, mas cada um tem detalhes que escondem ouro. Se você conhece estruturas de filas, pode pensar que já sabe do que se trata. E é aí que mora o engano. O RabbitMQ não é simplesmente uma...
Como perder mensagens com RabbitMQ
É comum falarmos sobre receitas de sucesso e como resolver problemas, mas será que você está fazendo essas coisas, está perdendo mensagens e vai culpar o RabbitMQ por isso? Se liga nessas dicas, pois se você está perdendo mensagens com RabbitMQ, a culpa é totalmente...
Ring Buffer – Antecipe, otimize e evite custos excessivos
Ring Buffer, também chamado de Circular Buffer é uma estrutura de dados muito poderosa. Seu nome já traz o spoiler e entrega o ouro, afinal não deixa de ser um buffer, só que trabalhando em formato de anel/circular. Se você não faz ideia do que seja, vem comigo nessa...
Post Resposta: POR QUE ADOTAR KAFKA PARA MENSAGERIA?
Esse é um post resposta ao post POR QUE ADOTAR KAFKA PARA MENSAGERIA? do Elemar JR no site da Eximia, sua empresa. A resposta estava ficando longa demais, e resolvi transformar em post. Principalmente por se tratar de um conteúdo (RabbitMQ) que está no meu toolset,...
RabbitMQ & AMQP – #8 – Redis, um Message Broker?
Então você já usa Redis no seu stack, e optou por usá-lo também para publicar mensagens de um lado para outro em sua aplicação. Talvez seu amigo tenha dito que "não precisa de RabbitMQ", ou que "é um canhão para matar uma formiga". A começar pela pergunta: Você busca...
RabbitMQ & AMQP – #7 – Pipelines & Youtube Downloader
No finalzinho de 2017 eu falei de um projeto chamado youtube downloader, um projeto de exemplo, experimental, que emprega o uso de filas para fazer todo o processo de download e encoding de mídias, a partir do youtube. Mesmo tendo o propósito de exclusivamente falar...
RabbitMQ & AMQP – #6 – Show me the code
No post anterior eu mostrei como as coisas acontecem na interface de gerenciamento do RabbitMQ. Agora é hora de mostrar as principais iterações com o RabbitMQ via código. Naturalmente, privilegiarei C# aqui, mas você pode usar as principais tecnologias para realizar...
RabbitMQ & AMQP – #5 – Management UI, Filas e Exchanges
Vamos começar? Que tal de fato olharmos para o RabbitMQ para nos acostumarmos com ele, e dar vida ao que falamos até agora? Subindo RabbitMQ com docker Há diversas formas de subir uma instância do RabbitMQ, uma delas é com Docker, e está aqui um exemplo com Docker...
RabbitMQ & AMQP – #4 – Perguntas e Respostas
Vamos às principais perguntas e respostas sobre RabbitMQ e mensageria em geral. Fugirei das formalidades e serie mais raso nas argumentações. A tentativa é de deixar as respostas mais claras. Como eu pego uma mensagem na fila? Esse nem é uma dúvida, é um erro...
RabbitMQ & AMQP – #3 – Conceitos
Agora é o momento de falarmos brevemente sobre cada elemento do AMQP. Nesse post ainda estamos tratando com superficialidade, mas é importantíssimo passar por aqui para progredirmos nessa jornada. Standard vs Implementação Standard que trata de mensageria. No AMQP não...
RabbitMQ & AMQP – #2 – Pra que Mensageria?
Embora fosse a hora de falar do standard, acho que é preciso definir mensageria antes. Vamos aos principais pontos. Mensageria É pra mim? Talvez você já tenha se perguntado a respeito do sentido de usar uma solução de filas, mensageria, enfim um message broker como...
RabbitMQ & AMQP – #1 – Prefácio
Todas as semanas, algumas semanas mais, outras menos, me questionam sobre RabbitMQ. Sua utilidade, se vale a pena ou não aprender ou usar, ou até se não é mais adequado criar uma tabelinha no banco para controlar o que foi processado e o que não foi. Na prática a zona...
Message Broker & .Net Core – Introdução ao RabbitMQ
Pessoal, no dia 15/Fev batemos um papo no Canal .NET com o título Message Broker & .Net Core - Introdução ao RabbitMQ. Nesse bate-papo apresentamos RabbitMQ como Message Broker, mas com foco no AMQP, que por sua vez desponta como principal standard, amplamente...
Messaging Patterns – Pipelines Elásticos
Pipelines Elásticos quebram processamentos em pipes que por sua vez podem ser escalados individualmente. Atuando com grandes cargas de trabalho, oferece flexibilidade, melhor consumo de recursos e melhora no tempo de resposta com o aumento de paralelismo. A dinâmica...
docker-gallery/EnterpriseApplicationLog – v3.0
Em outubro no post Docker - de A a Z - 15 - RabbitMQ, LogStash, ElasticSearch e Kibana com Docker Compose eu apresentei um modelo interessante de Log, com uma abordagem diferente. Ficou muito simples para trabalhar com o stack, no entanto a Elastic.co mudou muita...
Docker – de A a Z – 15 – RabbitMQ, ElasticSearch , LogStash e Kibana
Durante a série Docker de A a Z, esse foi um dos Stacks entregues para facilitar a compreensão de como docker pode nos ajudar a unir soluções complexas, colaborando para criar stacks com diversos projetos e produtos. Esse stack serviu para a apresentação, mas também...