.NET
Cloud Native e Cloud Agnostic
para rodar .NET em qualquer Cloud
ou sem Cloud sempre de forma profissional!
Últimas publicações
Aqui estão os últimos 12 posts de mais de 500…
Mitigando os custos de Reflection
Reflection oferece um mecanismo sofisticado para inspeção e manipulação de metadados de tipos, métodos e propriedades em tempo de execução. No entanto, essa flexibilidade vem acompanhada de custos elevados, que penalizam desempenho e eficiência de qualquer aplicação. Sempre que podemos evitar,...
Vai criar um IConfiguration? Não esqueça as variáveis de ambiente!
Quando construímos aplicações em .NET (especialmente .NET Core e posteriores), temos acesso a um pipeline de configuração bastante poderoso, que permite combinar diversas fontes de configuração: arquivos JSON, variáveis de ambiente, User Secrets, Azure Key Vault, entre outras. Entretanto, não é...
Voltando do .NET Aspire para o Docker Compose
Já faz algum tempo que publiquei um post contando sobre minha experiência com o .NET Aspire. Depois de mais de 14 semanas com .NET Aspire chegou a hora de dizer “até logo”. Neste texto, vamos discutir a viabilidade de usar o .NET Aspire em projetos baseados em Docker Compose e também mostrar o...
Implementando Delay no RabbitMQ com Oragon.RabbitMQ sem Delayed Exchange
Um assunto recorrente quando falamos de RabbitMQ é a implementação de delay. Embora tenhamos o delayed exchange, existem questões relacionadas a cluster que precisam ser consideradas e por isso não é algo que aborde, além de ser algo instalado à parte. Existem muitos motivos para evitarmos esse...
O custo real das exceptions – 02 – Estamos olhando para o lugar certo?
Sem sombra de dúvidas, o principal argumento que sustenta a ideia de que exceptions são ruins é o custo. Afinal, ninguém quer colar em si uma placa dizendo que "optou pelo caminho mais lento". Ao mesmo tempo, as discussões acaloradas transformam o debate em uma rinha onde cada qual adota uma...
Sobre MediatR
Nos últimos anos, o MediatR tornou-se amplamente utilizado na comunidade .NET. Muitos projetos são construídos a partir de templates que o incorporam, resultando em uma adoção generalizada. No entanto, poucas pessoas questionam a necessidade real de sua utilização. Em algumas ocasiões, fui...
Oragon.RabbitMQ 1.1 – Reduzindo Alocações
Então esse foi o dia que queimei a lingua! Uma das criticas que faço às publicações que falam sobre ganhos absurdos de 50%, 80% e até mais de 100% de performance onde todas as variáveis se mantiveram as mesmas, é que afinal: Ganhamos 100% ou deixamos de perder 50%? Como o velho ditado "A...
Monorepo vs Multirepo?
Gerenciar configurações em projetos de software vai muito além de uma simples questão técnica — é algo que realmente faz diferença na maturidade da equipe e na eficiência do desenvolvimento. Se você já trabalhou com repositórios cheios de serviços diferentes, sabe bem que decidir como implantar,...
O custo real das exceptions – 01 – A série
O uso de exceptions no .NET tem sido um tópico de debates acalorados na comunidade. Para alguns, exceptions representam um custo desnecessário, um vestígio de práticas antiquadas que poderiam ser substituídas por abordagens mais eficientes. Para outros, são um pilar essencial para a robustez e...
Há momentos em que é preciso dizer NÃO para o negócio
No cenário atual de desenvolvimento de sistemas, especialmente em ambientes de alta demanda, a realidade se impõe: nem sempre é possível atender a todas as solicitações do negócio sem alterar a base técnica. Em diversas situações, é necessário que o arquiteto exerça a maturidade de saber quando...
Microsserviços vs Componentes
Uma dúvida frequente na adoção de microserviços é sobre a diferenciação entre o “microserviços” e os “componentes” que ele pode conter. Muitas pessoas imaginam que um microserviço seja apenas uma API, implementada em um projeto monolítico, mas a realidade (e a prática) mostram que ele pode sim ser...
Otimizando consumo de recursos em aplicações .NET com RingBuffer
Frequentemente nos deparamos com desafios relacionados ao gerenciamento eficiente de recursos limitados, como conexões de banco de dados, sockets e serviços como RabbitMQ e Redis. Para solucionar esses desafios, um conceito fundamental e poderoso entra em cena: o Ring Buffer ou Circular Buffer....
Projetos Open Source
projetos ativos e projetos antigos disponíveis para estudo
OpenIdConnect Mock Server – Identity Server fake
Você já fez uma prova de conceito ou uma demonstração em que seria bem interessante testar com vários perfís, mas pensou duas vezes sobre o esforço de subir um Identity Server? Já se questionou quais alternativas teria e tentou de tudo não ter esse esforço? Pois bem, aconteceu comigo algumas...
Oragon.AspNetCore.Hosting.AMQP
Se olharmos com cuidado para o HTTP e AMQP conseguimos encontrar semelhanças das mais diversas. Headers, Body. Se olharmos sobre as implementações sob o HTTP que conhecemos, vemos também outras características comuns como Routing, parsing. Fato que usar a infraestrutura base do ASP.NET Core, com...
RabbitMQ Walkthrough v1
RabbitMQ - Demonstração de Comportamento padrão com Mensageria. Material complementar dos cursos: RabbitMQ para Aplicações .NETDocker Definitivo / O ROADMAP Objetivo 1) Demonstrar comportamento padrão quando: A) Temos uma carga de trabalho menor que nossa capacidade de processamentoB) Temos uma...
EnterpriseApplicationLog
Enterprise Application Log consiste é um stack pré-configurado que contém RabbitMQ e ELK Stack colaborando para entregar uma robusta plataforma de monitoramento, centralização e consolidação de logs. Nesse stack de log utilizo RabbitMQ, LogStash, ElasticSearch e Kibana com Docker Compose. São...
mssql-server-linux | SQL Server +Automações
A mesma imagem do SQL Server no Linux, mas tão configurável quanto as consagradas imagens do MariaDB, MySQL e PostgreSQL. Quem precisa subir um banco de dados junto com a aplicação precisa de uma imagem que possibilite a criação de usuários, databases, inicialização via scripts. Esses recursos já...
Entender | Analisar | Projetar | Desenvolver | Implantar | Manter
A segurança que você busca não está em um tutorialPara entender uma tecnologia é importante entender o que influenciou sua criação, o que ela faz de fato, como ela faz. Para que então se sinta seguro e confiante a respeito das decisões que está prestes a tomar.
De um lado precisamos compreender o que está sendo feito por baixo dos panos para descobrir como extrair o máximo de uma tecnologia ou, ao menos, não atrapalhar o bom funcionamento dela.
O Cloud Native .NET é uma jornada de descoberta sobre tecnologias e patterns que fazem parte da maioria dos softwares que usamos, que somos usuários e que suportam e toleram altas cargas de trabalho, de forma eficaz, eficiente e sustentável.
É primeiro entendendo o que eles fazem, que podemos descobrir oportunidades e evoluir no que fazemos…

Conteúdo
Voltando do .NET Aspire para o Docker Compose
Já faz algum tempo que publiquei um post contando sobre minha experiência com o .NET Aspire. Depois de mais de 14 semanas com .NET Aspire chegou a hora de dizer “até logo”. Neste texto, vamos discutir a viabilidade de usar o .NET Aspire em projetos baseados em Docker Compose e também mostrar o...
Implementando Delay no RabbitMQ com Oragon.RabbitMQ sem Delayed Exchange
Um assunto recorrente quando falamos de RabbitMQ é a implementação de delay. Embora tenhamos o delayed exchange, existem questões relacionadas a cluster que precisam ser consideradas e por isso não é algo que aborde, além de ser algo instalado à parte. Existem muitos motivos para evitarmos esse...
Mininal API para RabbitMQ – Oragon.RabbitMQ 1.0 foi lançado!
Na noite do dia 25 de Dezembro lancçamos a versão 1 do Oragon.RabbitMQ, uma implementação de Minimal Api's para o consumo de filas do RabbitMQ. Com ele temos a mesma experiência de minimal api's para o consumo de filas. Contexto RabbitMQ é um projeto incrível, seu client dá um suporte de primeiro...
6 Semanas com .NET Aspire
Estamos na semana 43 de 2024, faltam 9 semanas para o réveillon. Desde a semana 38 estou trabalhando com ASPIRE e quero falar sobre essa experiência. Contexto O primeiro ponto para a contextualização é que o Academia Pay não é um projeto para ser comercializado, vendido, ou ter clientes reais,...
Oragon.RabbitMQ 1.1 – Reduzindo Alocações
Então esse foi o dia que queimei a lingua! Uma das criticas que faço às publicações que falam sobre ganhos absurdos de 50%, 80% e até mais de 100% de performance onde todas as variáveis se mantiveram as mesmas, é que afinal: Ganhamos 100% ou deixamos de perder 50%? Como o velho ditado "A...
Monorepo vs Multirepo?
Gerenciar configurações em projetos de software vai muito além de uma simples questão técnica — é algo que realmente faz diferença na maturidade da equipe e na eficiência do desenvolvimento. Se você já trabalhou com repositórios cheios de serviços diferentes, sabe bem que decidir como implantar,...
A anatomia de um JenkinsFile para projeto .NET
Segundo a JetBrains, o Jenkins continua relevante, ocupando a primeira posição na categoria Team Tools > Continuous integration (CI) system, portanto, mesmo não envelhecendo muito bem, por mais caquético que pareça, continua ocupando 50% do mercado corporativo....
Níveis de Maturidade SaaS e Gestão do Crescimento da Infraestrutura
No contexto do crescimento exponencial das soluções SaaS (Software as a Service), a compreensão dos diferentes níveis de maturidade em arquiteturas multitenant e do impacto que estes têm no consumo de infraestrutura é essencial para qualquer arquiteto de software ou líder técnico. Neste artigo,...
Microsserviços vs Componentes
Uma dúvida frequente na adoção de microserviços é sobre a diferenciação entre o “microserviços” e os “componentes” que ele pode conter. Muitas pessoas imaginam que um microserviço seja apenas uma API, implementada em um projeto monolítico, mas a realidade (e a prática) mostram que ele pode sim ser...
Otimizando consumo de recursos em aplicações .NET com RingBuffer
Frequentemente nos deparamos com desafios relacionados ao gerenciamento eficiente de recursos limitados, como conexões de banco de dados, sockets e serviços como RabbitMQ e Redis. Para solucionar esses desafios, um conceito fundamental e poderoso entra em cena: o Ring Buffer ou Circular Buffer....
A fábrica de engrenagens
Estava escrevendo sobre .NET Aspire, porém, no meio do texto fui tomado por um acesso de raiva ao retratar o caminho que nós, como comunidade técnica e como sociedade, estamos tomando. Quero compartilhar essa reflexão, pois a forma fragmentada como desenvolvedores querem ser responsáveis por cada...
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 esquecer da natureza caótica do...
Conheça nosso Podcast
DevShow PodcastEm 2019 resolvemos criar um podcast, o DevShow Podcast, desde lá são mais de 40 episódios com muito assunto legal, sempre com essa pegada pessoal, falando coisas sérias, mas sem o menor compromisso com a formalidade.

.NET

Mitigando os custos de Reflection
Reflection oferece um mecanismo sofisticado para inspeção e manipulação de metadados de tipos, métodos e propriedades em tempo de execução. No entanto, essa flexibilidade vem acompanhada de custos elevados, que penalizam desempenho e eficiência de qualquer aplicação.
Sempre que podemos evitar, evitamos seu uso, mas e quando não podemos? Como podemos tratar ou mitigar esses prejuízos em desempenho?
Hoje vou apresentar uma abordagem que usei recentemente em um projeto recente.
ler mais…
O custo real das exceptions – 02 – Estamos olhando para o lugar certo?
Sem sombra de dúvidas, o principal argumento que sustenta a ideia de que exceptions são ruins é o custo. Afinal, ninguém quer colar em si uma placa dizendo que “optou pelo caminho mais lento“.
Ao mesmo tempo, as discussões acaloradas transformam o debate em uma rinha onde cada qual adota uma postura que desqualifica toda e qualquer opinião contrária.
Mas afinal, quanto custa uma exception?
Este artigo não pretende fornecer respostas definitivas, mas levantar questionamentos importantes:
Será que estamos ignorando alguma peça fundamental nessa discussão? A aversão às exceptions é justificada por dados concretos ou apenas uma tendência emergente sem embasamento empírico suficiente?
ler mais…
O custo real das exceptions – 01 – A série
O uso de exceptions no .NET tem sido um tópico de debates acalorados na comunidade. Para alguns, exceptions representam um custo desnecessário, um vestígio de práticas antiquadas que poderiam ser substituídas por abordagens mais eficientes. Para outros, são um pilar essencial para a robustez e previsibilidade do software moderno.
Se exceptions realmente fossem um problema significativo, por que ainda são adotadas de forma unilateral, em todo lugar, principalmente nos componentes centrais do ecossistema .NET, no ASP.NET, no Entity Framework e em diversas bibliotecas e fundações da própria Microsoft?
Será que há questões que não estamos considerando?
Antes de abraçar qualquer lado, é fundamental analisar a questão de forma técnica e pragmática.
Esta série de artigos pretende fornecer respostas, e levantar questionamentos importantes.
ler mais…
Vai criar um IConfiguration? Não esqueça as variáveis de ambiente!
Quando construímos aplicações em .NET (especialmente .NET Core e posteriores), temos acesso a um pipeline de configuração bastante poderoso, que permite combinar diversas fontes de configuração: arquivos JSON, variáveis de ambiente, User Secrets, Azure Key Vault, entre outras.
Entretanto, não é tão raro esbarrar projetos que utilizem exclusivamente arquivos appsettings.json (e suas variações, como appsettings.Development.json, appsettings.Production.json, etc.) e inadvertidamente não só se ignorem o uso de variáveis de ambiente, mas também impossibilitem sua utilização.
O inferno tem um lugar especial para quem faz isso intencionalmente.
ler mais…
Sobre MediatR
Nos últimos anos, o MediatR tornou-se amplamente utilizado na comunidade .NET. Muitos projetos são construídos a partir de templates que o incorporam, resultando em uma adoção generalizada. No entanto, poucas pessoas questionam a necessidade real de sua utilização.
Em algumas ocasiões, fui questionado sobre os motivos para não usar MediatR. Para muitos desenvolvedores, sua presença em um projeto é considerada um padrão inevitável, algo que não precisa de justificativa ou debate.
Neste artigo, quero explorar essa ferramenta sob uma ótica mais crítica e avaliar seu impacto real na arquitetura de software.
ler mais…Arquitetura

Mitigando os custos de Reflection
Reflection oferece um mecanismo sofisticado para inspeção e manipulação de metadados de tipos, métodos e propriedades em tempo de execução. No entanto, essa flexibilidade vem acompanhada de custos elevados, que penalizam desempenho e eficiência de qualquer aplicação.
Sempre que podemos evitar, evitamos seu uso, mas e quando não podemos? Como podemos tratar ou mitigar esses prejuízos em desempenho?
Hoje vou apresentar uma abordagem que usei recentemente em um projeto recente.
ler mais…
Voltando do .NET Aspire para o Docker Compose
Já faz algum tempo que publiquei um post contando sobre minha experiência com o .NET Aspire. Depois de mais de 14 semanas com .NET Aspire chegou a hora de dizer “até logo”.
Neste texto, vamos discutir a viabilidade de usar o .NET Aspire em projetos baseados em Docker Compose e também mostrar o processo de migração do .NET Aspire de volta para o Docker Compose.
ler mais…
Oragon.RabbitMQ 1.1 – Reduzindo Alocações
Então esse foi o dia que queimei a lingua!
Uma das criticas que faço às publicações que falam sobre ganhos absurdos de 50%, 80% e até mais de 100% de performance onde todas as variáveis se mantiveram as mesmas, é que afinal: Ganhamos 100% ou deixamos de perder 50%?
Como o velho ditado “A estatística é a arte de torturar os números até que eles confessem o que você quer demonstrar”.
Bem, eu não passei batido à minha própria critica! Hoje vou falar sobre a redução nas alocações de respostas.
ler mais…
Microsserviços vs Componentes
Uma dúvida frequente na adoção de microserviços é sobre a diferenciação entre o “microserviços” e os “componentes” que ele pode conter.
Muitas pessoas imaginam que um microserviço seja apenas uma API, implementada em um projeto monolítico, mas a realidade (e a prática) mostram que ele pode sim ser composto por diversos elementos internos (como APIs, workers, jobs em segundo plano etc.) desde que todos compartilhem o mesmo propósito de negócio/bounded context.
ler mais…
Implementando Delay no RabbitMQ com Oragon.RabbitMQ sem Delayed Exchange
Um assunto recorrente quando falamos de RabbitMQ é a implementação de delay.
Embora tenhamos o delayed exchange, existem questões relacionadas a cluster que precisam ser consideradas e por isso não é algo que aborde, além de ser algo instalado à parte.
ler mais…Containers

Voltando do .NET Aspire para o Docker Compose
Já faz algum tempo que publiquei um post contando sobre minha experiência com o .NET Aspire. Depois de mais de 14 semanas com .NET Aspire chegou a hora de dizer “até logo”.
Neste texto, vamos discutir a viabilidade de usar o .NET Aspire em projetos baseados em Docker Compose e também mostrar o processo de migração do .NET Aspire de volta para o Docker Compose.
ler mais…
.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.
ler mais…
Microsoft Artifact Registry (MAR) – Descobrindo imagens e tags
Ao longo da jornada de containers do novo .NET desde sua primeira versão (.NET Core), temos o docker hub e posteriormente o MCR servindo imagens docker para nossas aplicações e servidores.
Sempre foi chato buscar as tags disponíveis, nos fazendo voltar às documentações e papers que descrevem migração.
Hoje você descobrirá que o Microsoft Container Registry mudou de nome e como descobrir as tags das principais imagens docker.
ler mais…
OCR Minimal API | .NET 8
Já pensou subir um serviço, com um simples docker run e ter um OCR ilimitado disponível para seu sistema? Você pode usar, comercializar, e fazer absolutamente qualquer coisa com o OCR.
Você pode usar para leitura de documentos, validação de prints, e muito mais.
Pois bem, hoje falarei sobre um projeto que criei e pode te economizar tempo e dinheiro no seu próximo projeto.
ler mais…
Rancher Longhorn no Kubernetes 1.25
Recém lançado em agosto, Kubernetes 1.25 trouxe desafios para o longhorn. Há pouco mais de 10 dias foi liberada na master do projeto a versão que permite usá-lo no Kubernetes 1.25. Mas afinal, o que é Longhorn?
ler mais…Mensageria

Oragon.RabbitMQ 1.1 – Reduzindo Alocações
Então esse foi o dia que queimei a lingua!
Uma das criticas que faço às publicações que falam sobre ganhos absurdos de 50%, 80% e até mais de 100% de performance onde todas as variáveis se mantiveram as mesmas, é que afinal: Ganhamos 100% ou deixamos de perder 50%?
Como o velho ditado “A estatística é a arte de torturar os números até que eles confessem o que você quer demonstrar”.
Bem, eu não passei batido à minha própria critica! Hoje vou falar sobre a redução nas alocações de respostas.
ler mais…
Implementando Delay no RabbitMQ com Oragon.RabbitMQ sem Delayed Exchange
Um assunto recorrente quando falamos de RabbitMQ é a implementação de delay.
Embora tenhamos o delayed exchange, existem questões relacionadas a cluster que precisam ser consideradas e por isso não é algo que aborde, além de ser algo instalado à parte.
ler mais…
Mininal API para RabbitMQ – Oragon.RabbitMQ 1.0 foi lançado!
Na noite do dia 25 de Dezembro lancçamos a versão 1 do Oragon.RabbitMQ, uma implementação de Minimal Api’s para o consumo de filas do RabbitMQ.
Com ele temos a mesma experiência de minimal api’s para o consumo de filas.
ler mais…
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 esquecer da natureza caótica do dia-a-dia. Mensageria nos devolve o caos, agora nos eventos assíncronos disparados por cada ator simultaneamente.
A parte ruim é que muitos ficam pelo caminho, muitos profissionais, projetos, e a parte legal é que de certa forma: é desafiador e divertido!
Nesse evento, que acontecerá no sábado vamos dar vazão aos últimos conteúdos do Mensageria .NET for Architects, e finalizar essa entrega que dura alguns anos.
ler mais…
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.
ler mais…Conteúdo e Posicionamento


.NET + Cloud Native + Cloud Agnostic
.NET | DevOps | Microservices | Containers | Continuous Delivery
.NET muito além do .NET
O mínimo de infra que todo dev e/ou arquiteto deveria saber
Aplicações distribuídas e comunicação entre serviços (RabbitMQ / gRPC)
Containers, Docker e Kubernetes
RabbitMQ e Mensageria e comunicação assíncrona entre aplicações e serviços
Arquitetura de Software e Arquitetura de Solução com foco no melhor aproveitamento em projetos .NET
Nossos números
Desde 2002 trabalhando com desenvolvimento de software
Desde 2002 ajudando outros devs
Desde 2010 trabalhando exclusivamente como arquiteto
Contas atingidas no telegram/facebook
Alunos
Microsoft MVP
Conteúdo Gratuito
Tudo que está aqui no gaGO.io é conteúdo gratuito, feito para ajudar desenvolvedores dos mais variados níveis.
Cursos
Tenho também alguns programas de acompanhamento. Esses programas tem a função de ajudar desenvolvedores em áreas específicas ou de forma mais abrangente na jornada do arquiteto.