Jovane.MessageBus
1.0.7
dotnet add package Jovane.MessageBus --version 1.0.7
NuGet\Install-Package Jovane.MessageBus -Version 1.0.7
<PackageReference Include="Jovane.MessageBus" Version="1.0.7" />
<PackageVersion Include="Jovane.MessageBus" Version="1.0.7" />
<PackageReference Include="Jovane.MessageBus" />
paket add Jovane.MessageBus --version 1.0.7
#r "nuget: Jovane.MessageBus, 1.0.7"
#:package Jovane.MessageBus@1.0.7
#addin nuget:?package=Jovane.MessageBus&version=1.0.7
#tool nuget:?package=Jovane.MessageBus&version=1.0.7
🚌 Jovane.MessageBus
A Jovane.MessageBus é uma biblioteca de infraestrutura de alto desempenho para .NET, projetada para simplificar a integração com RabbitMQ em arquiteturas de microserviços. Ela abstrai a complexidade do driver oficial, oferecendo uma API fluida para mensageria assíncrona e RPC (Remote Procedure Call).
🌟 Principais Recursos
- Gestão Automática de Topologia: Criação dinâmica de Exchanges, Queues e Bindings no RabbitMQ antes de cada operação.
- Mensageria Tipada: Suporte total a classes C# como mensagens de integração (herança de
IntegrationEvent). - Padrão RPC (Request/Response): Implementação robusta de requisição e resposta sobre filas temporárias e exclusivas, com suporte a correlação de IDs.
- Resiliência Nativa: Recuperação automática de conexões e canais via
RabbitMQ.Client. - Injeção de Dependência: Registro simplificado no container nativo do .NET via
IServiceCollection. - Roteamento Configurável: Desacoplamento total via mapeamento de eventos em
appsettings.json.
📦 Instalação
Adicione o pacote ao seu projeto (exemplo via CLI):
dotnet add package Jovane.MessageBus
⚙️ Configuração
A biblioteca utiliza uma seção no appsettings.json para mapear os eventos às entidades do RabbitMQ. Isso permite que você mude a infraestrutura de filas sem alterar o código-fonte.
{
"rabbit": {
"Url": "amqp://guest:guest@localhost:5672",
"Exchange": {
"UsuarioRegistradoIntegrationEvent": "auth-service-exchange",
"EmailIntegrationEvent": "notification-service-exchange"
},
"Queue": {
"UsuarioRegistradoIntegrationEvent": "registrar-usuario-fila",
"EmailIntegrationEvent": "enviar-email-fila"
},
"RoutingKey": {
"UsuarioRegistradoIntegrationEvent": "usuario.registrado",
"EmailIntegrationEvent": "email.prioridade.alta"
}
}
}
No seu Program.cs:
using Configuration;
// Registro da biblioteca
builder.Services.AddRabbitConfiguration(builder.Configuration);
📖 Como Usar
1. Definindo Mensagens
Todas as mensagens de integração devem herdar de IntegrationEvent.
public class UsuarioRegistradoIntegrationEvent : IntegrationEvent
{
public string Id { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
}
2. Publicando Eventos (Pub/Sub)
Injete IMessageBus em seus serviços para disparar mensagens do tipo "fire and forget".
public class AuthService(IMessageBus bus)
{
public async Task Registrar(Usuario usuario)
{
// ... lógica de negócio
var evento = new UsuarioRegistradoIntegrationEvent
{
Id = usuario.Id,
Nome = usuario.Nome,
Email = usuario.Email
};
await bus.PublishAsync(evento);
}
}
3. Padrão Request/Response (RPC)
Ideal para quando um microserviço precisa de uma resposta imediata ou validação de outro sistema de forma síncrona sobre mensageria.
Enviando a Requisição (Requester):
// Enviando e aguardando a resposta
var response = await _messageBus.RequestAsync<MeuPedidoRequest, ResponseMessage>(meuPedido);
if (response.ValidationResult.IsValid)
{
// Sucesso na integração
}
Processando a Requisição (Responder):
// Geralmente implementado em um BackgroundService ou Worker
await _messageBus.RespondAsync<MeuPedidoRequest, ResponseMessage>(async request =>
{
// Lógica de processamento...
var validacao = new ValidationResult(); // FluentValidation
return new ResponseMessage(validacao);
});
🛠️ Arquitetura e Fluxo
A biblioteca utiliza o IEventRouteResolver para buscar as configurações. O fluxo segue estas etapas:
- Resolução: Identifica
Exchange,RoutingKeyeQueuebaseando-se no nome da classe do evento. - Garantia de Infra (Ensure): Declara a Exchange (Topic), a Queue (Durable) e o Binding automaticamente.
- Serialização: Utiliza
System.Text.JsoncomCamelCasepara padronização. - Execução: Publica ou consome utilizando as propriedades de correlação (
CorrelationId) e retorno (ReplyTo) quando necessário.
🧪 Dependências
- RabbitMQ.Client (7.2.0) - Core da comunicação.
- FluentValidation - Padronização das mensagens de resposta.
- MediatR - Base para eventos e notificações.
- Microsoft.Extensions.Options - Gerenciamento de configurações.
👨💻 Autor
Jovane Sousa
Biblioteca criada para padronizar e facilitar a comunicação entre microserviços em ecossistemas .NET.
Dica: Sinta-se à vontade para contribuir com Pull Requests ou abrir Issues no repositório oficial! 🚀
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FluentValidation (>= 12.1.1)
- MediatR (>= 14.0.0)
- Microsoft.Extensions.Configuration (>= 10.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Options (>= 10.0.3)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.3)
- RabbitMQ.Client (>= 7.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.