Get SimpleMessageBus working in your application with just a few simple steps.

Step 1: Install the Package

Choose the provider that matches your infrastructure:
dotnet add package SimpleMessageBus.Publish.Azure
dotnet add package SimpleMessageBus.Dispatch.Azure

Step 2: Define Your Message

Create a message class that implements IMessage:
using SimpleMessageBus.Core;

public class UserCreatedMessage : IMessage
{
    public string UserId { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

Step 3: Create a Message Handler

Implement IMessageHandler<T> to process your messages:
using SimpleMessageBus.Core;

public class UserCreatedHandler : IMessageHandler<UserCreatedMessage>
{
    private readonly ILogger<UserCreatedHandler> _logger;

    public UserCreatedHandler(ILogger<UserCreatedHandler> logger)
    {
        _logger = logger;
    }

    public async Task HandleAsync(UserCreatedMessage message)
    {
        _logger.LogInformation("User created: {UserId} - {Email}", 
            message.UserId, message.Email);
        
        // Process the message (send welcome email, update database, etc.)
        await ProcessUserCreation(message);
    }

    private async Task ProcessUserCreation(UserCreatedMessage message)
    {
        // Your business logic here
        await Task.Delay(100); // Simulate processing
    }
}

Step 4: Configure Services

Add SimpleMessageBus to your dependency injection container:
using SimpleMessageBus.Publish.Azure.Extensions;
using SimpleMessageBus.Dispatch.Azure.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Configure Azure Storage Queue
builder.Services.AddSimpleMessageBusAzureStoragePublisher(options =>
{
    options.ConnectionString = builder.Configuration.GetConnectionString("AzureStorage");
});

builder.Services.AddSimpleMessageBusAzureStorageDispatcher(options =>
{
    options.ConnectionString = builder.Configuration.GetConnectionString("AzureStorage");
});

// Register your message handler
builder.Services.AddScoped<IMessageHandler<UserCreatedMessage>, UserCreatedHandler>();

var app = builder.Build();

Step 5: Publish Messages

Inject IMessagePublisher and publish messages:
public class UserController : ControllerBase
{
    private readonly IMessagePublisher _messagePublisher;

    public UserController(IMessagePublisher messagePublisher)
    {
        _messagePublisher = messagePublisher;
    }

    [HttpPost]
    public async Task<IActionResult> CreateUser([FromBody] CreateUserRequest request)
    {
        // Create the user (your business logic)
        var userId = await CreateUserInDatabase(request);

        // Publish the message
        var message = new UserCreatedMessage
        {
            UserId = userId,
            Email = request.Email,
            CreatedAt = DateTime.UtcNow
        };

        await _messagePublisher.PublishAsync(message);

        return Ok(new { UserId = userId });
    }
}

Step 6: Start Processing

The message dispatcher will automatically start processing messages when your application starts. For Azure Functions or console applications, you might need additional configuration.
For Azure Functions, see the Azure Functions guide for trigger-based message processing.

Next Steps

Congratulations! You now have SimpleMessageBus running in your application. Here are some next steps:

Example Application

For a complete working example, check out our sample applications on GitHub.