From 52254af623387e7928ae0616cdebb5f25d24d389 Mon Sep 17 00:00:00 2001 From: Irina Dominte Date: Wed, 8 Apr 2026 16:06:37 +0300 Subject: [PATCH 1/6] Samples for delayed delivery --- .../Rabbit_11/DelayedDeliveryRabbitMQ.sln | 29 ++++++++++ .../Rabbit_11/Receiver/MyCommandHandler.cs | 14 +++++ .../Rabbit_11/Receiver/Program.cs | 17 ++++++ .../Rabbit_11/Receiver/Receiver.csproj | 21 +++++++ .../Rabbit_11/Sender/Program.cs | 55 +++++++++++++++++++ .../Rabbit_11/Sender/Sender.csproj | 20 +++++++ .../Rabbit_11/Shared/MyCommand.cs | 5 ++ .../Rabbit_11/Shared/Shared.csproj | 14 +++++ samples/rabbitmq/delayed-delivery/sample.md | 38 +++++++++++++ transports/rabbitmq/delayed-delivery.md | 2 + ...-scripting_content_rabbit_[11,).partial.md | 20 +++++++ 11 files changed, 235 insertions(+) create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs create mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj create mode 100644 samples/rabbitmq/delayed-delivery/sample.md diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln b/samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln new file mode 100644 index 00000000000..a28279b7090 --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln @@ -0,0 +1,29 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29728.190 +MinimumVisualStudioVersion = 15.0.26730.12 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sender", "Sender\Sender.csproj", "{B1234567-1111-2222-3333-444444444401}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{B1234567-1111-2222-3333-444444444402}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receiver", "Receiver\Receiver.csproj", "{B1234567-1111-2222-3333-444444444403}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B1234567-1111-2222-3333-444444444401}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1234567-1111-2222-3333-444444444401}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1234567-1111-2222-3333-444444444402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1234567-1111-2222-3333-444444444402}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1234567-1111-2222-3333-444444444403}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1234567-1111-2222-3333-444444444403}.Debug|Any CPU.Build.0 = Debug|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B1234567-1111-2222-3333-444444444400} + EndGlobalSection +EndGlobal diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs new file mode 100644 index 00000000000..c1e7669c0d4 --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs @@ -0,0 +1,14 @@ +namespace Receiver; + +using Microsoft.Extensions.Logging; +using Shared; + +public class MyCommandHandler(ILogger logger) : IHandleMessages +{ + public Task Handle(MyCommand commandMessage, IMessageHandlerContext context) + { + logger.LogInformation("Received MyCommand"); + + return Task.CompletedTask; + } +} diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs new file mode 100644 index 00000000000..9aafc3fd5de --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.Hosting; + +Console.Title = "Receiver"; +var builder = Host.CreateApplicationBuilder(args); + +#region ConfigureRabbit +var endpointConfiguration = new EndpointConfiguration("Samples.RabbitMQ.DelayedDelivery.Receiver"); +var transport = endpointConfiguration.UseTransport(); +endpointConfiguration.UseSerialization(); +transport.UseConventionalRoutingTopology(QueueType.Quorum); +transport.ConnectionString("host=localhost"); +#endregion + +endpointConfiguration.EnableInstallers(); + +builder.UseNServiceBus(endpointConfiguration); +await builder.Build().RunAsync(); diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj new file mode 100644 index 00000000000..3f03e75bfcb --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj @@ -0,0 +1,21 @@ + + + + Exe + enable + enable + 14.0 + net10.0 + + + + + + + + + + + + + diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs new file mode 100644 index 00000000000..0dcf4f7b336 --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs @@ -0,0 +1,55 @@ +using Shared; + +Console.Title = "Sender"; + +#region ConfigureRabbit +var endpointConfiguration = new EndpointConfiguration("Samples.RabbitMQ.DelayedDelivery.Sender"); +var transport = endpointConfiguration.UseTransport(); +transport.UseConventionalRoutingTopology(QueueType.Quorum); +transport.ConnectionString("host=localhost"); +#endregion + +endpointConfiguration.UseSerialization(); +transport.Routing().RouteToEndpoint(typeof(MyCommand), "Samples.RabbitMQ.DelayedDelivery.Receiver"); +endpointConfiguration.EnableInstallers(); + +var endpointInstance = await Endpoint.Start(endpointConfiguration); +await SendMessages(endpointInstance); +await endpointInstance.Stop(); + +static async Task SendMessages(IMessageSession messageSession) +{ + Console.WriteLine("Press [d] to send commands across multiple delay levels. Press [Esc] to exit."); + + while (true) + { + var input = Console.ReadKey(); + Console.WriteLine(); + + switch (input.Key) + { + case ConsoleKey.D: + #region SendDelayedMessages + var delays = new[] + { + TimeSpan.FromSeconds(5), + TimeSpan.FromSeconds(60), + TimeSpan.FromSeconds(360), + TimeSpan.FromSeconds(86400), + }; + + foreach (var delay in delays) + { + var options = new SendOptions(); + options.DelayDeliveryWith(delay); + options.SetDestination("Samples.RabbitMQ.DelayedDelivery.Receiver"); + await messageSession.Send(new MyCommand(), options); + Console.WriteLine($"Sent command with delay of {delay}"); + } + #endregion + break; + case ConsoleKey.Escape: + return; + } + } +} diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj b/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj new file mode 100644 index 00000000000..724f5c2c387 --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj @@ -0,0 +1,20 @@ + + + + Exe + enable + enable + 14.0 + net10.0 + + + + + + + + + + + + diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs new file mode 100644 index 00000000000..6b5c5bb13ab --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs @@ -0,0 +1,5 @@ +namespace Shared; + +public class MyCommand : ICommand +{ +} diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj b/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj new file mode 100644 index 00000000000..f8a894ae174 --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj @@ -0,0 +1,14 @@ + + + + enable + enable + 14.0 + net10.0 + + + + + + + diff --git a/samples/rabbitmq/delayed-delivery/sample.md b/samples/rabbitmq/delayed-delivery/sample.md new file mode 100644 index 00000000000..5d93a7fe1da --- /dev/null +++ b/samples/rabbitmq/delayed-delivery/sample.md @@ -0,0 +1,38 @@ +--- +title: RabbitMQ Delayed Delivery +reviewed: 2026-04-08 +component: Rabbit +related: +- transports/rabbitmq +- transports/rabbitmq/delayed-delivery +- transports/rabbitmq/operations-scripting +--- + + +## Prerequisites + +Ensure an instance of RabbitMQ is running and accessible. + + +## Code walk-through + +This sample demonstrates delayed delivery with the RabbitMQ transport. The sender sends commands with different delays, causing messages to be placed into different levels of the v2 delay infrastructure. The receiver logs each command when it is delivered. + + +### Configuration + +snippet: ConfigureRabbit + + +### Sending delayed messages + +snippet: SendDelayedMessages + +Each delay value exercises different levels of the [v2 delay infrastructure](/transports/rabbitmq/delayed-delivery.md). The delays are chosen to spread messages across distinct delay levels: + +| Delay | Starting delay level | +|---|---| +| 5 seconds | 2 | +| 60 seconds | 5 | +| 360 seconds | 8 | +| 86400 seconds (1 day) | 16 | diff --git a/transports/rabbitmq/delayed-delivery.md b/transports/rabbitmq/delayed-delivery.md index e5a8e8aaad9..4f337b2ceae 100644 --- a/transports/rabbitmq/delayed-delivery.md +++ b/transports/rabbitmq/delayed-delivery.md @@ -6,6 +6,8 @@ reviewed: 2025-05-02 versions: '[4,]' redirects: - nservicebus/rabbitmq/delayed-delivery +related: + - samples/rabbitmq/delayed-delivery --- partial: v1-warning diff --git a/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md b/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md index b6d91d43662..8e3aa264202 100644 --- a/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md +++ b/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md @@ -89,6 +89,26 @@ rabbitmq-transport delays transfer [options] `--disableCertValidation` : Disable remote certificate validation when connecting to the broker
`--routingTopology` | `-r` : The routing topology to use
+> [!NOTE] +> Before running this command, the destination broker must have the v2 delay infrastructure in place. Use the [`delays create`](#delays-create) command to set it up: +> +> ``` +> rabbitmq-transport delays create --connectionString "amqp://user:pass@destination-host" --managementApiUrl "http://destination-host:15672" +> ``` + +> [!NOTE] +> All exchanges and queues that exist on the source broker must also exist on the destination broker before running this command. Use the [`endpoint create`](#endpoint-create) command for each endpoint: +> +> ``` +> rabbitmq-transport endpoint create --connectionString "amqp://user:pass@destination-host" +> ``` + +#### Usage example + +``` +rabbitmq-transport delays transfer --sourceConnectionString "amqp://user:pass@source-host" --sourceManagementApiUrl "http://source-host:15672" --destinationConnectionString "amqp://user:pass@destination-host" --destinationManagementApiUrl "http://destination-host:15672" --routingTopology conventional +``` + ### `delays verify` Use this command to verify broker requirements for using the v2 delay infrastructure: From ffa478d6edd82d5e3fdac70c12a66b09dc56ca97 Mon Sep 17 00:00:00 2001 From: Irina Dominte Date: Wed, 8 Apr 2026 21:30:00 +0300 Subject: [PATCH 2/6] Removed the sample --- .../Rabbit_11/DelayedDeliveryRabbitMQ.sln | 29 ---------- .../Rabbit_11/Receiver/MyCommandHandler.cs | 14 ----- .../Rabbit_11/Receiver/Program.cs | 17 ------ .../Rabbit_11/Receiver/Receiver.csproj | 21 ------- .../Rabbit_11/Sender/Program.cs | 55 ------------------- .../Rabbit_11/Sender/Sender.csproj | 20 ------- .../Rabbit_11/Shared/MyCommand.cs | 5 -- .../Rabbit_11/Shared/Shared.csproj | 14 ----- samples/rabbitmq/delayed-delivery/sample.md | 38 ------------- 9 files changed, 213 deletions(-) delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs delete mode 100644 samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj delete mode 100644 samples/rabbitmq/delayed-delivery/sample.md diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln b/samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln deleted file mode 100644 index a28279b7090..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/DelayedDeliveryRabbitMQ.sln +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29728.190 -MinimumVisualStudioVersion = 15.0.26730.12 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sender", "Sender\Sender.csproj", "{B1234567-1111-2222-3333-444444444401}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{B1234567-1111-2222-3333-444444444402}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Receiver", "Receiver\Receiver.csproj", "{B1234567-1111-2222-3333-444444444403}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B1234567-1111-2222-3333-444444444401}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1234567-1111-2222-3333-444444444401}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1234567-1111-2222-3333-444444444402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1234567-1111-2222-3333-444444444402}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1234567-1111-2222-3333-444444444403}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1234567-1111-2222-3333-444444444403}.Debug|Any CPU.Build.0 = Debug|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B1234567-1111-2222-3333-444444444400} - EndGlobalSection -EndGlobal diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs deleted file mode 100644 index c1e7669c0d4..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/MyCommandHandler.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Receiver; - -using Microsoft.Extensions.Logging; -using Shared; - -public class MyCommandHandler(ILogger logger) : IHandleMessages -{ - public Task Handle(MyCommand commandMessage, IMessageHandlerContext context) - { - logger.LogInformation("Received MyCommand"); - - return Task.CompletedTask; - } -} diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs deleted file mode 100644 index 9aafc3fd5de..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Program.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.Extensions.Hosting; - -Console.Title = "Receiver"; -var builder = Host.CreateApplicationBuilder(args); - -#region ConfigureRabbit -var endpointConfiguration = new EndpointConfiguration("Samples.RabbitMQ.DelayedDelivery.Receiver"); -var transport = endpointConfiguration.UseTransport(); -endpointConfiguration.UseSerialization(); -transport.UseConventionalRoutingTopology(QueueType.Quorum); -transport.ConnectionString("host=localhost"); -#endregion - -endpointConfiguration.EnableInstallers(); - -builder.UseNServiceBus(endpointConfiguration); -await builder.Build().RunAsync(); diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj b/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj deleted file mode 100644 index 3f03e75bfcb..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Receiver/Receiver.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - enable - enable - 14.0 - net10.0 - - - - - - - - - - - - - diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs deleted file mode 100644 index 0dcf4f7b336..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Program.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Shared; - -Console.Title = "Sender"; - -#region ConfigureRabbit -var endpointConfiguration = new EndpointConfiguration("Samples.RabbitMQ.DelayedDelivery.Sender"); -var transport = endpointConfiguration.UseTransport(); -transport.UseConventionalRoutingTopology(QueueType.Quorum); -transport.ConnectionString("host=localhost"); -#endregion - -endpointConfiguration.UseSerialization(); -transport.Routing().RouteToEndpoint(typeof(MyCommand), "Samples.RabbitMQ.DelayedDelivery.Receiver"); -endpointConfiguration.EnableInstallers(); - -var endpointInstance = await Endpoint.Start(endpointConfiguration); -await SendMessages(endpointInstance); -await endpointInstance.Stop(); - -static async Task SendMessages(IMessageSession messageSession) -{ - Console.WriteLine("Press [d] to send commands across multiple delay levels. Press [Esc] to exit."); - - while (true) - { - var input = Console.ReadKey(); - Console.WriteLine(); - - switch (input.Key) - { - case ConsoleKey.D: - #region SendDelayedMessages - var delays = new[] - { - TimeSpan.FromSeconds(5), - TimeSpan.FromSeconds(60), - TimeSpan.FromSeconds(360), - TimeSpan.FromSeconds(86400), - }; - - foreach (var delay in delays) - { - var options = new SendOptions(); - options.DelayDeliveryWith(delay); - options.SetDestination("Samples.RabbitMQ.DelayedDelivery.Receiver"); - await messageSession.Send(new MyCommand(), options); - Console.WriteLine($"Sent command with delay of {delay}"); - } - #endregion - break; - case ConsoleKey.Escape: - return; - } - } -} diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj b/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj deleted file mode 100644 index 724f5c2c387..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Sender/Sender.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - enable - enable - 14.0 - net10.0 - - - - - - - - - - - - diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs b/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs deleted file mode 100644 index 6b5c5bb13ab..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/MyCommand.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Shared; - -public class MyCommand : ICommand -{ -} diff --git a/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj b/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj deleted file mode 100644 index f8a894ae174..00000000000 --- a/samples/rabbitmq/delayed-delivery/Rabbit_11/Shared/Shared.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - enable - enable - 14.0 - net10.0 - - - - - - - diff --git a/samples/rabbitmq/delayed-delivery/sample.md b/samples/rabbitmq/delayed-delivery/sample.md deleted file mode 100644 index 5d93a7fe1da..00000000000 --- a/samples/rabbitmq/delayed-delivery/sample.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: RabbitMQ Delayed Delivery -reviewed: 2026-04-08 -component: Rabbit -related: -- transports/rabbitmq -- transports/rabbitmq/delayed-delivery -- transports/rabbitmq/operations-scripting ---- - - -## Prerequisites - -Ensure an instance of RabbitMQ is running and accessible. - - -## Code walk-through - -This sample demonstrates delayed delivery with the RabbitMQ transport. The sender sends commands with different delays, causing messages to be placed into different levels of the v2 delay infrastructure. The receiver logs each command when it is delivered. - - -### Configuration - -snippet: ConfigureRabbit - - -### Sending delayed messages - -snippet: SendDelayedMessages - -Each delay value exercises different levels of the [v2 delay infrastructure](/transports/rabbitmq/delayed-delivery.md). The delays are chosen to spread messages across distinct delay levels: - -| Delay | Starting delay level | -|---|---| -| 5 seconds | 2 | -| 60 seconds | 5 | -| 360 seconds | 8 | -| 86400 seconds (1 day) | 16 | From e309a30ec352bf94924d6981e1e088ffd7e9d865 Mon Sep 17 00:00:00 2001 From: "Irina Dominte(Scurtu)" Date: Thu, 9 Apr 2026 12:46:29 +0300 Subject: [PATCH 3/6] Update transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md --- .../operations-scripting_content_rabbit_[11,).partial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md b/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md index 8e3aa264202..1b06f02e72a 100644 --- a/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md +++ b/transports/rabbitmq/operations-scripting_content_rabbit_[11,).partial.md @@ -106,7 +106,7 @@ rabbitmq-transport delays transfer [options] #### Usage example ``` -rabbitmq-transport delays transfer --sourceConnectionString "amqp://user:pass@source-host" --sourceManagementApiUrl "http://source-host:15672" --destinationConnectionString "amqp://user:pass@destination-host" --destinationManagementApiUrl "http://destination-host:15672" --routingTopology conventional +rabbitmq-transport delays transfer --sourceConnectionString "amqp://user:pass@source-host" --destinationConnectionString "amqp://user:pass@destination-host" ``` ### `delays verify` From 2626ff3abff6b34e23dd13ec22ea51e65d82b772 Mon Sep 17 00:00:00 2001 From: "Irina Dominte(Scurtu)" Date: Thu, 9 Apr 2026 12:47:12 +0300 Subject: [PATCH 4/6] Update delayed-delivery.md --- transports/rabbitmq/delayed-delivery.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/transports/rabbitmq/delayed-delivery.md b/transports/rabbitmq/delayed-delivery.md index 4f337b2ceae..e5a8e8aaad9 100644 --- a/transports/rabbitmq/delayed-delivery.md +++ b/transports/rabbitmq/delayed-delivery.md @@ -6,8 +6,6 @@ reviewed: 2025-05-02 versions: '[4,]' redirects: - nservicebus/rabbitmq/delayed-delivery -related: - - samples/rabbitmq/delayed-delivery --- partial: v1-warning From 6b0004be288fd9674d014c0b2bd930af5e2a7b7e Mon Sep 17 00:00:00 2001 From: Irina Dominte Date: Thu, 9 Apr 2026 14:40:35 +0300 Subject: [PATCH 5/6] added reference to delays transfer --- transports/rabbitmq/delayed-delivery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transports/rabbitmq/delayed-delivery.md b/transports/rabbitmq/delayed-delivery.md index e5a8e8aaad9..b6825989543 100644 --- a/transports/rabbitmq/delayed-delivery.md +++ b/transports/rabbitmq/delayed-delivery.md @@ -185,4 +185,4 @@ partial: disabledelayeddelivery When upgrading the RabbitMQ cluster, it is recommended to use the [rolling (in-place)](https://www.rabbitmq.com/docs/upgrade#rolling-upgrade) method. -Due to the way the native delayed delivery infrastructure is implemented, upgrading RabbitMQ by using [blue-green deployments](https://www.rabbitmq.com/docs/upgrade#blue-green-deployment) is more complicated and requires the specialized shovelling of delayed messages in order to avoid message loss. Contact [Particular support](https://customers.particular.net/request-support) for further details on this scenario. +Due to the way the native delayed delivery infrastructure is implemented, upgrading RabbitMQ by using [blue-green deployments](https://www.rabbitmq.com/docs/upgrade#blue-green-deployment) is more complicated and requires the specialized shovelling of delayed messages in order to avoid message loss. You can use one of the supported cli tools like [`delays transfer`](/operations-scripting#delays-transfer) to aid with the shoveling. From 9b85e59ec5e5463e562e0ad29bd56558c52182bc Mon Sep 17 00:00:00 2001 From: Irina Dominte Date: Thu, 9 Apr 2026 14:55:47 +0300 Subject: [PATCH 6/6] fix path --- transports/rabbitmq/delayed-delivery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transports/rabbitmq/delayed-delivery.md b/transports/rabbitmq/delayed-delivery.md index b6825989543..ed486f627b2 100644 --- a/transports/rabbitmq/delayed-delivery.md +++ b/transports/rabbitmq/delayed-delivery.md @@ -185,4 +185,4 @@ partial: disabledelayeddelivery When upgrading the RabbitMQ cluster, it is recommended to use the [rolling (in-place)](https://www.rabbitmq.com/docs/upgrade#rolling-upgrade) method. -Due to the way the native delayed delivery infrastructure is implemented, upgrading RabbitMQ by using [blue-green deployments](https://www.rabbitmq.com/docs/upgrade#blue-green-deployment) is more complicated and requires the specialized shovelling of delayed messages in order to avoid message loss. You can use one of the supported cli tools like [`delays transfer`](/operations-scripting#delays-transfer) to aid with the shoveling. +Due to the way the native delayed delivery infrastructure is implemented, upgrading RabbitMQ by using [blue-green deployments](https://www.rabbitmq.com/docs/upgrade#blue-green-deployment) is more complicated and requires the specialized shovelling of delayed messages in order to avoid message loss. You can use one of the supported cli tools like [`delays transfer`](operations-scripting.md#delays-transfer) to aid with the shoveling.