Skip to main content

Pick Your Stack

Not sure which packages you need? Follow this guide to find the right combination for your scenario.


Simple Message Dispatcher​

Replacing MediatR or building a basic command/query pipeline.

<PackageReference Include="Excalibur.Dispatch" />
services.AddDispatch(dispatch =>
{
dispatch.AddHandlersFromAssembly(typeof(Program).Assembly);
dispatch.UseValidation();
});

That's it. No other packages needed. See the Getting Started guide.


Event-Sourced Application​

Which database?​

Quick start — event sourcing + outbox + hosting:

<PackageReference Include="Excalibur.Dispatch.SqlServer" />

Production — adds inbox, sagas, leader election, audit logging, compliance:

<PackageReference Include="Excalibur.SqlServer" />
services.AddExcaliburSqlServer(sql =>
{
sql.ConnectionString = connectionString;
sql.UseLeaderElection = true;
sql.UseAuditLogging = true;
});

Adding a Message Transport​

Choose a transport for publishing integration events between services:

<PackageReference Include="Excalibur.Dispatch.RabbitMQ" />
services.AddDispatchRabbitMQ(rmq =>
{
rmq.ConnectionString = "amqps://guest:guest@localhost";
});

Bundles: transport + resilience + observability.


Distributed System with Sagas​

Start with the event-sourcing stack above, then add saga persistence:

<!-- Already have Excalibur.SqlServer or Excalibur.Postgres? Sagas are included. -->

<!-- If using individual packages, add: -->
<PackageReference Include="Excalibur.Saga.SqlServer" />
<!-- or -->
<PackageReference Include="Excalibur.Saga.Postgres" />

Serverless Functions​

<PackageReference Include="Excalibur.Dispatch.Hosting.AzureFunctions" />

Full Enterprise Production Stack​

Complete provider + transport — everything you need:

<!-- Database provider (pick one) -->
<PackageReference Include="Excalibur.SqlServer" />

<!-- Transport (pick one) -->
<PackageReference Include="Excalibur.Dispatch.RabbitMQ" />

<!-- Cross-cutting concerns (opt-in) -->
<PackageReference Include="Excalibur.Security" />
<PackageReference Include="Excalibur.Dispatch.Validation.FluentValidation" />
<PackageReference Include="Excalibur.Dispatch.Caching" />
services.AddExcaliburSqlServer(sql =>
{
sql.ConnectionString = connectionString;
sql.UseLeaderElection = true;
sql.UseAuditLogging = true;
});

services.AddDispatchRabbitMQ(rmq =>
{
rmq.ConnectionString = "amqps://guest:guest@localhost";
});

services.AddDispatch(dispatch =>
{
dispatch.AddHandlersFromAssembly(typeof(Program).Assembly);
dispatch.UseValidation().WithFluentValidation();
dispatch.UseCaching();
dispatch.UseSecurity(builder.Configuration);
});

Package Tiering​

TierPurposeExamples
FeatureSingle concern, opt-inExcalibur.EventSourcing.SqlServer, Excalibur.Inbox.SqlServer
StarterGet up and running quicklyExcalibur.Dispatch.SqlServer, Excalibur.Dispatch.RabbitMQ
CompleteEverything for a providerExcalibur.SqlServer, Excalibur.Postgres

Starters bundle the most common features. Complete metapackages bundle everything for a database provider so you don't miss anything.


Next Steps​