diff --git a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md index 18392d834..37e70ec6a 100644 --- a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md +++ b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md @@ -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: + + + +```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: + + + +```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: + + + +```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: + + + +```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(); +```