GitPedia

SlimMessageBus

Lightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers.

From zaruszยทUpdated June 11, 2026ยทView on GitHubยท

SlimMessageBus is a lightweight, flexible, and extensible messaging framework for .NET, supporting multiple message brokers, including Kafka, RabbitMQ, Azure EventHubs, MQTT, Redis Pub/Sub, and more. It simplifies asynchronous communication and integrates seamlessly with modern .NET applications. The project is written primarily in C#, distributed under the Apache License 2.0 license, first published in 2016. Key topics include: apache-kafka, avro, azure, azure-event-hubs, azure-service-bus.

Latest release: 3.5.0โ€” 3.5.0 WiP

SlimMessageBus <!-- omit in toc -->

SlimMessageBus is a lightweight, flexible, and extensible messaging framework for .NET, supporting multiple message brokers, including Kafka, RabbitMQ, Azure EventHubs, MQTT, Redis Pub/Sub, and more. It simplifies asynchronous communication and integrates seamlessly with modern .NET applications.

GitHub license
Build
Maintainability Rating
Coverage
Duplicated Lines (%)
Vulnerabilities
Quality Gate Status

See how to migrate from MediatR or MassTransit

๐Ÿš€ Quick Start

Installation

bash
dotnet add package SlimMessageBus # Add specific transport provider, e.g. Kafka dotnet add package SlimMessageBus.Host.Kafka # Add serialization plugin dotnet add package SlimMessageBus.Host.Serialization.SystemTextJson

Basic Usage

Publishing Messages

csharp
IMessageBus bus; // injected public record OrderCreatedEvent(int OrderId); await bus.Publish(new OrderCreatedEvent(123));

Consuming Messages

csharp
public class OrderCreatedEventConsumer : IConsumer<OrderCreatedEvent> { public async Task OnHandle(OrderCreatedEvent message, CancellationToken cancellationToken) { // Handle the event } }

Request-Response Example

Sending a Request

csharp
public record CreateCustomerCommand(string Name) : IRequest<CreateCustomerCommandResult>; public record CreateCustomerCommandResult(Guid CustomerId); var result = await bus.Send(new CreateCustomerCommand("John Doe"));

Handling a Request

csharp
public class CreateCustomerCommandHandler : IRequestHandler<CreateCustomerCommand, CreateCustomerCommandResult> { public async Task<CreateCustomerCommandResult> OnHandle(CreateCustomerCommand request, CancellationToken cancellationToken) { // Create customer logic return new(Guid.NewGuid()); } }

Configuration Example

csharp
services.AddSlimMessageBus(mbb => { mbb.AddChildBus("Bus1", builder => { builder // the pub-sub events .Produce<OrderCreatedEvent>(x => x.DefaultPath("orders-topic")) .Consume<OrderCreatedEvent>(x => x.Path("orders-topic") //.WithConsumer<OrderCreatedEventConsumer>() // Optional: can be skipped as IConsumer<OrderCreatedEvent> will be resolved from DI //.KafkaGroup("kafka-consumer-group") // Kafka: Consumer Group //.SubscriptionName("azure-sb-topic-subscription") // Azure ServiceBus: Subscription Name ) // the request-response .Produce<CreateCustomerCommand>(x => x.DefaultPath("customer-requests")) .Handle<CreateCustomerCommand, CreateCustomerCommandResult>(x => x.Path("customer-requests")) // Use Kafka transport provider (requires SlimMessageBus.Host.Kafka package) .WithProviderKafka(cfg => cfg.BrokerList = "localhost:9092"); // Use Azure Service Bus transport provider //.WithProviderServiceBus(cfg => { ... }) // requires SlimMessageBus.Host.AzureServiceBus package // Use Azure Event Hub transport provider //.WithProviderEventHub(cfg => { ... }) // requires SlimMessageBus.Host.AzureEventHub package // Use Redis transport provider //.WithProviderRedis(cfg => { ... }) // requires SlimMessageBus.Host.Redis package // Use RabbitMQ transport provider //.WithProviderRabbitMQ(cfg => { ... }) // requires SlimMessageBus.Host.RabbitMQ package // Use in-memory transport provider //.WithProviderMemory(cfg => { ... }) // requires SlimMessageBus.Host.Memory package }) // Add other bus transports (as child bus for in memory domain events), if needed //.AddChildBus("Bus2", (builder) => { }) .AddJsonSerializer() // requires SlimMessageBus.Host.Serialization.SystemTextJson or SlimMessageBus.Host.Serialization.Json package .AddServicesFromAssemblyContaining<OrderCreatedEventConsumer>(); });

The configuration can be modularized (for modular monoliths).

๐Ÿ“– Documentation

๐Ÿ“ฆ NuGet Packages

NameDescriptionNuGet
SlimMessageBusThe core API for SlimMessageBusNuGet
Transports
.Host.AmazonSQSTransport provider for Amazon SQS / SNSNuGet
.Host.AzureEventHubTransport provider for Azure Event HubsNuGet
.Host.AzureServiceBusTransport provider for Azure Service BusNuGet
.Host.KafkaTransport provider for Apache KafkaNuGet
.Host.MQTTTransport provider for MQTTNuGet
.Host.MemoryTransport provider implementation for in-process (in memory) message passing (no messaging infrastructure required)NuGet
.Host.NATSTransport provider for NATSNuGet
.Host.RabbitMQTransport provider for RabbitMQNuGet
.Host.RedisTransport provider for RedisNuGet
.Host.Sql (pending)Transport provider implementation for SQL database message passingNuGet
Serialization
.Host.Serialization.JsonSerialization plugin for JSON (Newtonsoft.Json library)NuGet
.Host.Serialization.SystemTextJsonSerialization plugin for JSON (System.Text.Json library)NuGet
.Host.Serialization.AvroSerialization plugin for Avro (Apache.Avro library)NuGet
.Host.Serialization.HybridPlugin that delegates serialization to other serializers based on message typeNuGet
.Host.Serialization.GoogleProtobufSerialization plugin for Google ProtobufNuGet
Plugins
.Host.AspNetCoreIntegration for ASP.NET CoreNuGet
.Host.InterceptorCore interface for interceptorsNuGet
.Host.FluentValidationValidation for messages based on FluentValidationNuGet
.Host.Outbox.PostgreSqlTransactional Outbox using PostgreSQLNuGet
.Host.Outbox.PostgreSql.DbContextTransactional Outbox using PostgreSQL with EF DataContext integrationNuGet
.Host.Outbox.SqlTransactional Outbox using MSSQLNuGet
.Host.Outbox.Sql.DbContextTransactional Outbox using MSSQL with EF DataContext integrationNuGet
.Host.Outbox.MongoDb (beta)Transactional Outbox using MongoDBNuGet
.Host.AsyncApiAsyncAPI specification generation via SaunterNuGet
.Host.CircuitBreaker.HealthCheckConsumer circuit breaker based on health checksNuGet

Typically the application layers (domain model, business logic) only need to depend on SlimMessageBus which is the facade, and ultimately the application hosting layer (ASP.NET, Console App, Windows Service) will reference and configure the other packages (SlimMessageBus.Host.*) which are the messaging transport providers and additional plugins.

๐ŸŽฏ Features

  • Supports multiple messaging patterns: pub/sub, request-response, queues
  • Compatible with popular brokers: Kafka, RabbitMQ, Azure EventHubs, MQTT, Redis, and more
  • Fluent API for easy configuration
  • Plugin architecture for serialization, validation, outbox patterns and interceptor pipeline
  • Integration with .NET dependency injection
  • Modern async/await support
  • Minimal external dependencies
  • SourceLink support
  • Because SlimMessageBus is a facade, chosen messaging transports can be swapped without impacting the overall application architecture.

๐Ÿšง Contributing

We welcome contributions! See CONTRIBUTING.md for details on submitting issues, feature requests, and pull requests.
See here.

๐Ÿ’ฌ Community

  • Raise issues, discussions, questions and feature requests here.

๐Ÿ“œ License

SlimMessageBus is licensed under the Apache License 2.0.

๐Ÿ™Œ Credits

Special thanks to:

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub โ†’

This article is auto-generated from zarusz/SlimMessageBus via the GitHub API.Last fetched: 6/14/2026