From baacd01ab61db069159b3f0a9e5dfc767dac36cc Mon Sep 17 00:00:00 2001 From: Kris Akins Date: Mon, 22 Dec 2025 21:45:19 -0600 Subject: [PATCH 1/3] Update dead letter queue documentation for Azure Service Bus endpoints --- .../azureservicebus/deadletterqueues.md | 75 ++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md index 18392d834..7d34b9c4d 100644 --- a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md +++ b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md @@ -1,6 +1,77 @@ # 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 +using var host = await Host.CreateDefaultBuilder() + .UseWolverine(opts => + { + // Use inline processing with native Azure Service Bus DLQ + opts.ListenToAzureServiceBusQueue("inline-queue") + .ProcessInline(); + }).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 +using var host = await Host.CreateDefaultBuilder() + .UseWolverine(opts => + { + // Customize the dead letter queue name for buffered endpoint + opts.ListenToAzureServiceBusQueue("buffered-queue") + .BufferedInMemory() + .ConfigureDeadLetterQueue("my-custom-dlq"); + }).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 +using var host = await Host.CreateDefaultBuilder() + .UseWolverine(opts => + { + // Customize the dead letter queue name for durable endpoint + opts.ListenToAzureServiceBusQueue("durable-queue") + .UseDurableInbox() + .ConfigureDeadLetterQueue("my-custom-dlq"); + }).StartAsync(); +``` + +## Disabling Dead Letter Queues + +You can disable dead letter queuing for specific endpoints if needed: + + + +```cs +using var host = await Host.CreateDefaultBuilder() + .UseWolverine(opts => + { + // Disable dead letter queuing for this endpoint + opts.ListenToAzureServiceBusQueue("no-dlq") + .DisableDeadLetterQueueing(); + }).StartAsync(); +``` From be53ba3ab0e60677195b040d7b4a4e86d7671a3f Mon Sep 17 00:00:00 2001 From: Kris Akins Date: Mon, 22 Dec 2025 22:08:05 -0600 Subject: [PATCH 2/3] Update Azure Service Bus dead letter queue examples --- .../azureservicebus/deadletterqueues.md | 108 +++++++++++++----- 1 file changed, 78 insertions(+), 30 deletions(-) diff --git a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md index 7d34b9c4d..a3566a1e7 100644 --- a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md +++ b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md @@ -11,13 +11,25 @@ To configure an endpoint for inline processing: ```cs -using var host = await Host.CreateDefaultBuilder() - .UseWolverine(opts => - { - // Use inline processing with native Azure Service Bus DLQ - opts.ListenToAzureServiceBusQueue("inline-queue") - .ProcessInline(); - }).StartAsync(); +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 @@ -29,14 +41,26 @@ To customize the dead letter queue for buffered endpoints: ```cs -using var host = await Host.CreateDefaultBuilder() - .UseWolverine(opts => - { - // Customize the dead letter queue name for buffered endpoint - opts.ListenToAzureServiceBusQueue("buffered-queue") - .BufferedInMemory() - .ConfigureDeadLetterQueue("my-custom-dlq"); - }).StartAsync(); +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(); + + // 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 @@ -48,14 +72,26 @@ To customize the dead letter queue for durable endpoints: ```cs -using var host = await Host.CreateDefaultBuilder() - .UseWolverine(opts => - { - // Customize the dead letter queue name for durable endpoint - opts.ListenToAzureServiceBusQueue("durable-queue") - .UseDurableInbox() - .ConfigureDeadLetterQueue("my-custom-dlq"); - }).StartAsync(); +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(); + + // 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 @@ -65,13 +101,25 @@ You can disable dead letter queuing for specific endpoints if needed: ```cs -using var host = await Host.CreateDefaultBuilder() - .UseWolverine(opts => - { - // Disable dead letter queuing for this endpoint - opts.ListenToAzureServiceBusQueue("no-dlq") - .DisableDeadLetterQueueing(); - }).StartAsync(); +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(); + + // Disable dead letter queuing for this endpoint + opts.ListenToAzureServiceBusQueue("no-dlq") + .DisableDeadLetterQueueing(); +}); + +using var host = builder.Build(); +await host.StartAsync(); ``` From 2efef14f71a9fd22de62658478a654d49b2a61ff Mon Sep 17 00:00:00 2001 From: Kris Akins Date: Mon, 22 Dec 2025 22:09:14 -0600 Subject: [PATCH 3/3] Removed comments --- .../transports/azureservicebus/deadletterqueues.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md index a3566a1e7..37e70ec6a 100644 --- a/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md +++ b/docs/guide/messaging/transports/azureservicebus/deadletterqueues.md @@ -44,13 +44,10 @@ To customize the dead letter queue for buffered endpoints: 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(); // Customize the dead letter queue name for buffered endpoint @@ -75,13 +72,10 @@ To customize the dead letter queue for durable endpoints: 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(); // Customize the dead letter queue name for durable endpoint @@ -104,13 +98,10 @@ You can disable dead letter queuing for specific endpoints if needed: 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(); // Disable dead letter queuing for this endpoint