Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 112 additions & 2 deletions docs/guide/messaging/transports/azureservicebus/deadletterqueues.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,116 @@
# Dead Letter Queues

Wolverine.AzureServiceBus happily uses native [Azure Service Bus dead letter queueing](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues) and there's absolutely
nothing you need to do to enable that.
The behavior of Wolverine.AzureServiceBus dead letter queuing depends on the endpoint mode:

### Inline Endpoints

For inline endpoints, Wolverine uses native [Azure Service Bus dead letter queueing](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues). Failed messages are moved directly to the dead letter subqueue of the source queue. Note that inline endpoints do not use Wolverine's inbox for message persistence, so retries and dead lettering rely entirely on Azure Service Bus mechanisms.

To configure an endpoint for inline processing:

<!-- snippet: sample_asb_inline_dlq -->
<a id='snippet-sample_asb_inline_dlq'></a>
```cs
var builder = Host.CreateApplicationBuilder();
builder.UseWolverine(opts =>
{
// One way or another, you're probably pulling the Azure Service Bus
// connection string out of configuration
var azureServiceBusConnectionString = builder
.Configuration
.GetConnectionString("azure-service-bus");

// Connect to the broker
opts.UseAzureServiceBus(azureServiceBusConnectionString).AutoProvision();

// Use inline processing with native Azure Service Bus DLQ
opts.ListenToAzureServiceBusQueue("inline-queue")
.ProcessInline();
});

using var host = builder.Build();
await host.StartAsync();
```

### Buffered Endpoints

For buffered endpoints, Wolverine sends failed messages to a designated dead letter queue. By default, this queue is named `wolverine-dead-letter-queue`.

To customize the dead letter queue for buffered endpoints:

<!-- snippet: sample_asb_buffered_dlq -->
<a id='snippet-sample_asb_buffered_dlq'></a>
```cs
var builder = Host.CreateApplicationBuilder();
builder.UseWolverine(opts =>
{
var azureServiceBusConnectionString = builder
.Configuration
.GetConnectionString("azure-service-bus");

opts.UseAzureServiceBus(azureServiceBusConnectionString).AutoProvision();

// Customize the dead letter queue name for buffered endpoint
opts.ListenToAzureServiceBusQueue("buffered-queue")
.BufferedInMemory()
.ConfigureDeadLetterQueue("my-custom-dlq");
});

using var host = builder.Build();
await host.StartAsync();
```

### Durable Endpoints

Durable endpoints behave similarly to buffered endpoints, with dead lettering to the configured dead letter queue, while leveraging Wolverine's persistence for reliability.

To customize the dead letter queue for durable endpoints:

<!-- snippet: sample_asb_durable_dlq -->
<a id='snippet-sample_asb_durable_dlq'></a>
```cs
var builder = Host.CreateApplicationBuilder();
builder.UseWolverine(opts =>
{
var azureServiceBusConnectionString = builder
.Configuration
.GetConnectionString("azure-service-bus");

opts.UseAzureServiceBus(azureServiceBusConnectionString).AutoProvision();

// Customize the dead letter queue name for durable endpoint
opts.ListenToAzureServiceBusQueue("durable-queue")
.UseDurableInbox()
.ConfigureDeadLetterQueue("my-custom-dlq");
});

using var host = builder.Build();
await host.StartAsync();
```

## Disabling Dead Letter Queues

You can disable dead letter queuing for specific endpoints if needed:

<!-- snippet: sample_disable_asb_dlq -->
<a id='snippet-sample_disable_asb_dlq'></a>
```cs
var builder = Host.CreateApplicationBuilder();
builder.UseWolverine(opts =>
{
var azureServiceBusConnectionString = builder
.Configuration
.GetConnectionString("azure-service-bus");

opts.UseAzureServiceBus(azureServiceBusConnectionString).AutoProvision();

// Disable dead letter queuing for this endpoint
opts.ListenToAzureServiceBusQueue("no-dlq")
.DisableDeadLetterQueueing();
});

using var host = builder.Build();
await host.StartAsync();
```


Loading