SlimMessageBus
Lightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers.
Install / Use
/learn @zarusz/SlimMessageBusREADME
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.
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
- Introduction
- Transports:
- Plugins:
- Samples
- Use Cases
📦 NuGet Packages
| Name | Description | NuGet |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SlimMessageBus | The core API for SlimMessageBus | |
| Transports | | |
|
.Host.AmazonSQS | Transport provider for Amazon SQS / SNS | |
|
.Host.AzureEventHub | Transport provider for Azure Event Hubs | |
|
.Host.AzureServiceBus | Transport provider for Azure Service Bus | |
|
.Host.Kafka | Transport provider for Apache Kafka | |
|
.Host.MQTT | Transport provider for MQTT | |
|
.Host.Memory | Transport provider implementation for in-process (in memory) message passing (no messaging infrastructure required) | |
|
.Host.NATS | Transport provider for NATS |
