SlimMessageBus

April 19, 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.

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

See how to migrate from MediatR or MassTransit

๐Ÿš€ Quick Start

Installation

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

IMessageBus bus; // injected

public record OrderCreatedEvent(int OrderId);

await bus.Publish(new OrderCreatedEvent(123));

Consuming Messages

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

Request-Response Example

Sending a Request

public record CreateCustomerCommand(string Name) : IRequest<CreateCustomerCommandResult>;
public record CreateCustomerCommandResult(Guid CustomerId);

var result = await bus.Send(new CreateCustomerCommand("John Doe"));

Handling a Request


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

Configuration Example

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: