Solução em .NET 9 com workers que publicam e consomem mensagens via RabbitMQ, utilizando o modelo Hosted Service (Background Services).
A solução é composta por dois projetos Worker:
| Projeto | Descrição |
|---|---|
| WorkerRabbitMQ.NET.Publisher | Worker que publica mensagens na fila RabbitMQ.NET a cada 10 segundos. |
| WorkerRabbitMQ.NET.Consumer | Worker que consome mensagens da fila RabbitMQ.NET. |
┌─────────────────────────────┐ ┌──────────────────┐ ┌─────────────────────────────┐
│ WorkerRabbitMQ.NET.Publisher│ ────► │ RabbitMQ (fila │ ────► │ WorkerRabbitMQ.NET.Consumer │
│ Publica: Hello, World, ... │ │ "RabbitMQ.NET") │ │ Consome e exibe mensagens │
└─────────────────────────────┘ └──────────────────┘ └─────────────────────────────┘
- .NET 9 SDK
- RabbitMQ em execução (por padrão em
localhost:5672)
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management- AMQP:
localhost:5672 - Management UI: http://localhost:15672 (usuário/senha padrão:
guest/guest)
Na pasta raiz da solução (WorkerRabbitMQ.NET):
dotnet restore
dotnet buildO consumer precisa estar rodando para receber as mensagens:
cd WorkerRabbitMQ.NET.Consumer/WorkerRabbitMQ.NET.Consumer
dotnet runcd WorkerRabbitMQ.NET.Publisher/WorkerRabbitMQ.NET.Publisher
dotnet runO Publisher envia as mensagens Hello, World, From, Worker, RabbitMQ e Consumer uma a uma, com intervalo de 10 segundos. O Consumer exibe cada mensagem recebida no console.
- .NET 9 – Worker / Hosted Service
- Microsoft.Extensions.Hosting (9.0.13) –
IHost,BackgroundService - RabbitMQ.Client (7.2.0) – cliente AMQP para publicar e consumir
A conexão com o RabbitMQ usa por padrão HostName = "localhost". Para alterar host, porta, usuário ou senha, ajuste a ConnectionFactory nos arquivos:
- Publisher:
WorkerRabbitMQ.NET.Publisher/PublishMessage.cs - Consumer:
WorkerRabbitMQ.NET.Consumer/ConsumerMessage.cs
Exemplo com mais opções:
var factory = new ConnectionFactory
{
HostName = "localhost",
Port = 5672,
UserName = "guest",
Password = "guest"
};Para ambientes de produção, prefira configuração via appsettings.json, variáveis de ambiente ou User Secrets, em vez de valores fixos no código.
- Program.cs – Configura o host e registra o
WorkercomoIHostedService. - Worker.cs –
BackgroundServiceque, em loop, envia mensagens da lista e chamaPublishMessage.SendMessage. - PublishMessage.cs – Declara a fila
RabbitMQ.NETe publica mensagens viaBasicPublishAsync.
- Program.cs – Configura o host e registra o
WorkercomoIHostedService. - Worker.cs –
BackgroundServiceque inicia o consumo chamandoConsumerMessage.ReceiveMessage. - ConsumerMessage.cs – Declara a fila, cria um
AsyncEventingBasicConsumere consome mensagens comBasicConsumeAsync.
Uso interno / estudo. Ajuste conforme a política do seu projeto.