![]() |
VOOZH | about |
dotnet add package Excalibur.Dispatch.Transport.RabbitMQ --version 3.0.0-alpha.208
NuGet\Install-Package Excalibur.Dispatch.Transport.RabbitMQ -Version 3.0.0-alpha.208
<PackageReference Include="Excalibur.Dispatch.Transport.RabbitMQ" Version="3.0.0-alpha.208" />
<PackageVersion Include="Excalibur.Dispatch.Transport.RabbitMQ" Version="3.0.0-alpha.208" />Directory.Packages.props
<PackageReference Include="Excalibur.Dispatch.Transport.RabbitMQ" />Project file
paket add Excalibur.Dispatch.Transport.RabbitMQ --version 3.0.0-alpha.208
#r "nuget: Excalibur.Dispatch.Transport.RabbitMQ, 3.0.0-alpha.208"
#:package Excalibur.Dispatch.Transport.RabbitMQ@3.0.0-alpha.208
#addin nuget:?package=Excalibur.Dispatch.Transport.RabbitMQ&version=3.0.0-alpha.208&prereleaseInstall as a Cake Addin
#tool nuget:?package=Excalibur.Dispatch.Transport.RabbitMQ&version=3.0.0-alpha.208&prereleaseInstall as a Cake Tool
RabbitMQ transport implementation for the Excalibur framework, providing reliable message queuing with advanced features including dead letter handling, CloudEvents support, and automatic recovery.
This package is included in the following metapackages:
| Metapackage | Tier | What It Adds |
|---|---|---|
Excalibur.Dispatch.RabbitMQ |
Starter | + Resilience (Polly) + Observability |
Tip: If you are getting started, install
Excalibur.Dispatch.RabbitMQinstead of this package directly. It includes production-ready defaults.
This package provides RabbitMQ integration for Excalibur.Dispatch, enabling:
dotnet add package Excalibur.Dispatch.Transport.RabbitMQ
services.AddRabbitMqMessageBus(options =>
{
options.ConnectionString = "amqp://user:password@localhost:5672/vhost";
});
services.Configure<RabbitMqOptions>(options =>
{
options.ConnectionString = "amqp://localhost";
options.Exchange = "dispatch.events";
options.QueueName = "my-service-queue";
options.RoutingKey = "orders.*";
});
Configure via environment variables for containerized deployments:
RABBITMQ__CONNECTIONSTRING=amqp://user:password@rabbitmq:5672/
RABBITMQ__EXCHANGE=dispatch.events
RABBITMQ__QUEUENAME=my-service-queue
services.Configure<RabbitMqOptions>(configuration.GetSection("RabbitMQ"));
options.ConnectionString = "amqp://username:password@hostname:5672/vhost";
For production environments, enable TLS:
options.ConnectionString = "amqps://user:password@hostname:5671/";
When using client certificates, configure the connection factory directly through the RabbitMQ.Client library before registering services.
services.Configure<RabbitMqOptions>(options =>
{
// Exchange configuration
options.Exchange = "dispatch.events";
// Queue configuration
options.QueueName = "order-processor";
options.QueueDurable = true; // Survive broker restart (default: true)
options.QueueExclusive = false; // Allow multiple consumers (default: false)
options.QueueAutoDelete = false; // Keep queue when consumers disconnect (default: false)
// Routing
options.RoutingKey = "orders.#"; // Wildcard routing pattern
});
services.Configure<RabbitMqOptions>(options =>
{
// Prefetch (QoS)
options.PrefetchCount = 100; // Messages to prefetch (default: 100)
options.PrefetchGlobal = false; // Per-consumer prefetch (default: false)
// Acknowledgment
options.AutoAck = false; // Manual acknowledgment (default: false)
options.RequeueOnReject = true; // Requeue rejected messages (default: true)
// Batching
options.MaxBatchSize = 50; // Max messages per batch (default: 50)
options.MaxBatchWaitMs = 500; // Max wait for batch (default: 500ms)
// Consumer identification
options.ConsumerTag = "order-service-1";
});
Enable CloudEvents for interoperable event-driven architectures:
services.AddRabbitMqMessageBus(options =>
{
options.ConnectionString = "amqp://localhost";
options.EnableCloudEvents = true; // Default: true
// CloudEvents-specific settings
options.ExchangeType = ExchangeType.Topic;
options.Persistence = MessagePersistence.Persistent;
options.RoutingStrategy = RoutingStrategy.EventType;
});
For DoD-compliant validation:
services.AddRabbitMqCloudEventValidation(enableDoDCompliance: true);
Enable message-level encryption for sensitive data:
services.Configure<RabbitMqOptions>(options =>
{
options.EnableEncryption = true;
});
services.Configure<RabbitMqOptions>(options =>
{
// Enable dead letter handling
options.EnableDeadLetterExchange = true;
options.DeadLetterExchange = "dispatch.dlx";
options.DeadLetterRoutingKey = "failed.orders";
});
services.Configure<RabbitMqOptions>(options =>
{
// Connection resilience
options.ConnectionTimeoutSeconds = 30; // Connection timeout (default: 30)
options.AutomaticRecoveryEnabled = true; // Auto-reconnect (default: true)
options.NetworkRecoveryIntervalSeconds = 10; // Recovery interval (default: 10)
});
The transport implements ITransportHealthChecker for integration with ASP.NET Core health checks:
services.AddHealthChecks()
.AddCheck<RabbitMqHealthCheck>("rabbitmq", tags: new[] { "ready", "messaging" });
Configure health check behavior:
services.Configure<RabbitMqHealthCheckOptions>(options =>
{
options.Timeout = TimeSpan.FromSeconds(5);
options.IncludeQueueMetrics = true;
});
public class RabbitMqHealthCheck : IHealthCheck
{
private readonly ITransportHealthChecker _healthChecker;
public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
var result = await _healthChecker.CheckQuickHealthAsync(cancellationToken);
return result.Status switch
{
TransportHealthStatus.Healthy => HealthCheckResult.Healthy(),
TransportHealthStatus.Degraded => HealthCheckResult.Degraded(result.Description),
_ => HealthCheckResult.Unhealthy(result.Description)
};
}
}
QueueExclusive = false to allow multiple consumersPrefetchCount based on processing time (lower for slow consumers)QueueDurable = true for message persistenceAutomaticRecoveryEnabled for automatic reconnectionservices.Configure<RabbitMqOptions>(options =>
{
// High-throughput configuration
options.PrefetchCount = 250; // Increase for fast processors
options.MaxBatchSize = 100; // Larger batches
options.MaxBatchWaitMs = 100; // Shorter wait times
options.AutoAck = false; // Keep manual ack for reliability
});
Key metrics to monitor:
| Metric | Description | Alert Threshold |
|---|---|---|
| Queue Depth | Messages waiting | > 10,000 |
| Consumer Utilization | Active consumers | < 1 |
| Message Rate | Messages/second | Baseline deviation |
| Unacked Messages | Pending acknowledgments | > PrefetchCount × 2 |
amqps://) in productionRabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable
Solutions:
rabbitmqctl statusRabbitMQ.Client.Exceptions.AuthenticationFailureException: ACCESS_REFUSED
Solutions:
rabbitmqctl list_permissions -p /vhostRabbitMQ.Client.Exceptions.OperationInterruptedException: NOT_FOUND - no queue
Solutions:
rabbitmqctl list_queuesMessages continuously redelivered without processing.
Solutions:
RequeueOnReject setting matches desired behaviorPrefetchCount to avoid overwhelming consumersEnable detailed logging for troubleshooting:
{
"Logging": {
"LogLevel": {
"Excalibur.Dispatch.Transport.RabbitMQ": "Debug",
"RabbitMQ.Client": "Warning"
}
}
}
http://localhost:15672rabbitmqctl list_connectionsrabbitmqctl list_channelsrabbitmqctl list_bindingsservices.Configure<RabbitMqOptions>(options =>
{
// Connection
options.ConnectionString = "amqp://user:pass@localhost:5672/";
options.ConnectionTimeoutSeconds = 30;
options.AutomaticRecoveryEnabled = true;
options.NetworkRecoveryIntervalSeconds = 10;
// Exchange
options.Exchange = "dispatch.events";
// Queue
options.QueueName = "my-service";
options.QueueDurable = true;
options.QueueExclusive = false;
options.QueueAutoDelete = false;
options.QueueArguments = new Dictionary<string, object>
{
["x-message-ttl"] = 86400000, // 24 hours
["x-max-length"] = 100000
};
// Routing
options.RoutingKey = "orders.#";
// Consumer
options.PrefetchCount = 100;
options.PrefetchGlobal = false;
options.AutoAck = false;
options.RequeueOnReject = true;
options.ConsumerTag = "order-processor-1";
// Batching
options.MaxBatchSize = 50;
options.MaxBatchWaitMs = 500;
// Dead Letter
options.EnableDeadLetterExchange = true;
options.DeadLetterExchange = "dispatch.dlx";
options.DeadLetterRoutingKey = "failed";
// Security
options.EnableEncryption = false;
});
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 1 NuGet packages that depend on Excalibur.Dispatch.Transport.RabbitMQ:
| Package | Downloads |
|---|---|
|
Excalibur.Dispatch.RabbitMQ
Experience metapackage bundling Excalibur.Dispatch with RabbitMQ transport. Provides a single AddDispatchRabbitMQ() call for the common RabbitMQ messaging scenario. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.0-alpha.208 | 50 | 6/11/2026 |
| 3.0.0-alpha.207 | 52 | 6/11/2026 |
| 3.0.0-alpha.205 | 47 | 6/10/2026 |
| 3.0.0-alpha.204 | 52 | 6/8/2026 |
| 3.0.0-alpha.203 | 50 | 6/8/2026 |
| 3.0.0-alpha.202 | 50 | 6/8/2026 |
| 3.0.0-alpha.201 | 62 | 6/8/2026 |
| 3.0.0-alpha.199 | 53 | 6/8/2026 |
| 3.0.0-alpha.198 | 54 | 5/28/2026 |
| 3.0.0-alpha.197 | 69 | 5/28/2026 |
| 3.0.0-alpha.194 | 58 | 5/20/2026 |
| 3.0.0-alpha.193 | 60 | 5/13/2026 |
| 3.0.0-alpha.192 | 54 | 5/13/2026 |
| 3.0.0-alpha.191 | 52 | 5/13/2026 |
| 3.0.0-alpha.189 | 60 | 5/12/2026 |
| 3.0.0-alpha.187 | 59 | 5/8/2026 |
| 3.0.0-alpha.185 | 53 | 5/7/2026 |
| 3.0.0-alpha.183 | 56 | 5/7/2026 |
| 3.0.0-alpha.182 | 58 | 5/6/2026 |
| 3.0.0-alpha.181 | 57 | 5/6/2026 |