From ee3e457ddea60415f0e68be4e69904eb19b2d62a Mon Sep 17 00:00:00 2001 From: XShine555 Date: Sun, 5 Jul 2026 14:22:26 +0200 Subject: [PATCH] refactor(infra): auto-configure MassTransit endpoints via ConfigureEndpoints Replace ~240 lines of hand-written per-endpoint wiring with MassTransit's ConfigureEndpoints + KebabCaseEndpointNameFormatter, and apply retry + EF outbox globally through AddConfigureEndpointsCallback. Adding a consumer or activity is now a single AddConsumer/AddActivity line. - Normalize the 4 mismatched activity endpoint names to kebab-case so the routing-slip addressing keeps resolving (update-play-list-picture, delete/mark/publish play-list variants); cleanup consumer queue is now routing-slip-clean-up - Drop the now-unused QueueName consts from event consumers and trim EndpointHelper / delete the manual endpoint-config partial Verified end-to-end: booted the Worker against RabbitMQ in Docker and confirmed all 38 endpoints are configured with the exact names the builders address (19 execute queues + compensations + consumers + routing-slip-clean-up). Build: 0 warnings, 0 errors. --- .../Pictures/UpdatePlayListPictureActivity.cs | 2 +- .../PlayLists/DeletePlayListFromDbActivity.cs | 2 +- .../MarkPlayListAsRemovingActivity.cs | 2 +- ...hPlayListPictureProcessingEventActivity.cs | 2 +- .../Consumers/CreatePlayListConsumer.cs | 1 - .../Consumers/CreateTrackConsumer.cs | 1 - .../Consumers/DeletePlayListConsumer.cs | 1 - .../Consumers/DeleteTrackConsumer.cs | 1 - .../MassTransit/Consumers/EndpointHelper.cs | 8 +- .../Consumers/RoutingSlipCleanUpConsumer.cs | 2 +- .../UpdatePlayListPictureConsumer.cs | 1 - .../UpdatePlayListPictureSourceConsumer.cs | 1 - .../Consumers/UpdateTrackAudioConsumer.cs | 1 - .../Consumers/UpdateTrackPictureConsumer.cs | 1 - ...assTransitDependencyInjection.Endpoints.cs | 71 --------- ...TransitDependencyInjection.Registration.cs | 150 ------------------ .../MassTransitDependencyInjection.cs | 24 ++- 17 files changed, 29 insertions(+), 242 deletions(-) delete mode 100644 backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Endpoints.cs diff --git a/backend/Musify.Infrastructure/MassTransit/Activities/Pictures/UpdatePlayListPictureActivity.cs b/backend/Musify.Infrastructure/MassTransit/Activities/Pictures/UpdatePlayListPictureActivity.cs index 7af0cb3..464b105 100644 --- a/backend/Musify.Infrastructure/MassTransit/Activities/Pictures/UpdatePlayListPictureActivity.cs +++ b/backend/Musify.Infrastructure/MassTransit/Activities/Pictures/UpdatePlayListPictureActivity.cs @@ -11,7 +11,7 @@ namespace Musify.Infrastructure.MassTransit.Activities.Pictures ILogger logger) : IActivity { - public const string ExecuteEndpointName = "update-playlist-picture"; + public const string ExecuteEndpointName = "update-play-list-picture"; public async Task Execute(ExecuteContext executeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/DeletePlayListFromDbActivity.cs b/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/DeletePlayListFromDbActivity.cs index ec77a49..8329408 100644 --- a/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/DeletePlayListFromDbActivity.cs +++ b/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/DeletePlayListFromDbActivity.cs @@ -11,7 +11,7 @@ namespace Musify.Infrastructure.MassTransit.Activities.PlayLists ILogger logger) : IExecuteActivity { - public const string ExecuteEndpointName = "delete-playList-from-db"; + public const string ExecuteEndpointName = "delete-play-list-from-db"; public async Task Execute(ExecuteContext executeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/MarkPlayListAsRemovingActivity.cs b/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/MarkPlayListAsRemovingActivity.cs index e9a8c36..fefc42a 100644 --- a/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/MarkPlayListAsRemovingActivity.cs +++ b/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/MarkPlayListAsRemovingActivity.cs @@ -12,7 +12,7 @@ namespace Musify.Infrastructure.MassTransit.Activities.PlayLists ILogger logger) : IExecuteActivity { - public const string ExecuteEndpointName = "mark-playList-as-removing"; + public const string ExecuteEndpointName = "mark-play-list-as-removing"; public async Task Execute(ExecuteContext executeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/PublishPlayListPictureProcessingEventActivity.cs b/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/PublishPlayListPictureProcessingEventActivity.cs index 7754510..4112cbb 100644 --- a/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/PublishPlayListPictureProcessingEventActivity.cs +++ b/backend/Musify.Infrastructure/MassTransit/Activities/PlayLists/PublishPlayListPictureProcessingEventActivity.cs @@ -10,7 +10,7 @@ namespace Musify.Infrastructure.MassTransit.Activities.PlayLists ILogger logger) : IExecuteActivity { - public const string ExecuteEndpointName = "publish-playList-picture-processing-event"; + public const string ExecuteEndpointName = "publish-play-list-picture-processing-event"; public async Task Execute(ExecuteContext executeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/CreatePlayListConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/CreatePlayListConsumer.cs index 218e9bf..03d4d67 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/CreatePlayListConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/CreatePlayListConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers PlayListPictureSourceRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "create-playList"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/CreateTrackConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/CreateTrackConsumer.cs index 06d4441..058a225 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/CreateTrackConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/CreateTrackConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers CreateTrackRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "create-track"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/DeletePlayListConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/DeletePlayListConsumer.cs index 8c19ed5..a361907 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/DeletePlayListConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/DeletePlayListConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers DeletePlayListRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "delete-playList"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/DeleteTrackConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/DeleteTrackConsumer.cs index fbdc9a8..4d747fa 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/DeleteTrackConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/DeleteTrackConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers DeleteTrackRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "delete-track"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/EndpointHelper.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/EndpointHelper.cs index 60677c0..16cc517 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/EndpointHelper.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/EndpointHelper.cs @@ -2,13 +2,7 @@ namespace Musify.Infrastructure.MassTransit.Consumers { internal static class EndpointHelper { - internal static string ExecuteQueueName(string endpointName) => $"{endpointName}_execute"; - - internal static string CompensateQueueName(string endpointName) => $"{endpointName}_compensate"; - - internal static Uri BuildExecuteActivityUri(string endpointName) => new($"queue:{ExecuteQueueName(endpointName)}"); - - internal static Uri BuildCompensateActivityUri(string endpointName) => new($"queue:{CompensateQueueName(endpointName)}"); + internal static Uri BuildExecuteActivityUri(string endpointName) => new($"queue:{endpointName}_execute"); internal static Uri BuildConsumerUri(string endpointName) => new($"queue:{endpointName}"); } diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/RoutingSlipCleanUpConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/RoutingSlipCleanUpConsumer.cs index ece1cda..582f58a 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/RoutingSlipCleanUpConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/RoutingSlipCleanUpConsumer.cs @@ -9,7 +9,7 @@ namespace Musify.Infrastructure.MassTransit.Consumers IConsumer, IConsumer { - public const string QueueName = "routing-slip-events"; + public const string QueueName = "routing-slip-clean-up"; public Task Consume(ConsumeContext consumeContext) => DeleteFolder(consumeContext.Message.Variables); diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureConsumer.cs index fb93f7b..bac0d3d 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers PictureWorkflowRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "update-playList-picture"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureSourceConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureSourceConsumer.cs index f24e9dd..f29a17e 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureSourceConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdatePlayListPictureSourceConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers PlayListPictureSourceRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "update-playList-picture-source"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackAudioConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackAudioConsumer.cs index 8cb1b5a..a3ae3c9 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackAudioConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackAudioConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers AudioWorkflowRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "update-track-audio"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackPictureConsumer.cs b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackPictureConsumer.cs index 396c6e0..0fe65bc 100644 --- a/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackPictureConsumer.cs +++ b/backend/Musify.Infrastructure/MassTransit/Consumers/UpdateTrackPictureConsumer.cs @@ -9,7 +9,6 @@ namespace Musify.Infrastructure.MassTransit.Consumers PictureWorkflowRoutingSlipBuilder routingSlipBuilder) : IConsumer { - public const string QueueName = "update-track-picture"; public async Task Consume(ConsumeContext consumeContext) { diff --git a/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Endpoints.cs b/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Endpoints.cs deleted file mode 100644 index be0cd47..0000000 --- a/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Endpoints.cs +++ /dev/null @@ -1,71 +0,0 @@ -using MassTransit; -using Musify.Infrastructure.MassTransit.Consumers; -using Musify.Infrastructure.Persistence; - -namespace Musify.Infrastructure.MassTransit -{ - public static partial class MassTransitDependencyInjection - { - static void UseStandardRetry(IReceiveEndpointConfigurator endpointConfigurator) => - endpointConfigurator.UseMessageRetry(retryConfigurator => - retryConfigurator.Exponential( - retryLimit: 5, - minInterval: TimeSpan.FromSeconds(1), - maxInterval: TimeSpan.FromSeconds(30), - intervalDelta: TimeSpan.FromSeconds(2))); - - static void ConfigureConsumerEndpoint( - IRabbitMqBusFactoryConfigurator busFactoryConfigurator, - IBusRegistrationContext busRegistrationContext, - string queueName) - where TConsumer : class, IConsumer - { - busFactoryConfigurator.ReceiveEndpoint(queueName, endpointConfigurator => - { - UseStandardRetry(endpointConfigurator); - endpointConfigurator.UseEntityFrameworkOutbox(busRegistrationContext); - endpointConfigurator.ConfigureConsumer(busRegistrationContext); - }); - } - - static void ConfigureExecuteActivityEndpoint( - IRabbitMqBusFactoryConfigurator busFactoryConfigurator, - IBusRegistrationContext busRegistrationContext, - string endpointName) - where TActivity : class, IExecuteActivity - where TArguments : class - { - busFactoryConfigurator.ReceiveEndpoint(EndpointHelper.ExecuteQueueName(endpointName), endpointConfigurator => - { - UseStandardRetry(endpointConfigurator); - endpointConfigurator.UseEntityFrameworkOutbox(busRegistrationContext); - endpointConfigurator.ExecuteActivityHost(busRegistrationContext); - }); - } - - static void ConfigureActivityEndpoint( - IRabbitMqBusFactoryConfigurator busFactoryConfigurator, - IBusRegistrationContext busRegistrationContext, - string endpointName) - where TActivity : class, IActivity - where TArguments : class - where TLog : class - { - busFactoryConfigurator.ReceiveEndpoint(EndpointHelper.ExecuteQueueName(endpointName), endpointConfigurator => - { - UseStandardRetry(endpointConfigurator); - endpointConfigurator.UseEntityFrameworkOutbox(busRegistrationContext); - endpointConfigurator.ExecuteActivityHost( - EndpointHelper.BuildCompensateActivityUri(endpointName), - busRegistrationContext); - }); - - busFactoryConfigurator.ReceiveEndpoint(EndpointHelper.CompensateQueueName(endpointName), endpointConfigurator => - { - UseStandardRetry(endpointConfigurator); - endpointConfigurator.UseEntityFrameworkOutbox(busRegistrationContext); - endpointConfigurator.CompensateActivityHost(busRegistrationContext); - }); - } - } -} diff --git a/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Registration.cs b/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Registration.cs index 5e1d744..fc9b54f 100644 --- a/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Registration.cs +++ b/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.Registration.cs @@ -1,6 +1,5 @@ using MassTransit; using Microsoft.Extensions.DependencyInjection; -using Musify.Infrastructure.Configuration; using Musify.Infrastructure.MassTransit.Activities.Pictures; using Musify.Infrastructure.MassTransit.Activities.Audio; using Musify.Infrastructure.MassTransit.Activities.Files; @@ -59,154 +58,5 @@ namespace Musify.Infrastructure.MassTransit options.AddActivity(); options.AddActivity(); } - - static void ConfigureRabbitMqWorkerEndpoints( - IBusRegistrationContext busRegistrationContext, - IRabbitMqBusFactoryConfigurator busFactoryConfigurator) - { - ConfigureRabbitMqHost( - busFactoryConfigurator, - busRegistrationContext.GetRequiredService()); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdatePlayListPictureConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdateTrackAudioConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdateTrackPictureConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - DeleteTrackConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - DeletePlayListConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - CreateTrackConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - CreatePlayListConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdatePlayListPictureSourceConsumer.QueueName); - - ConfigureConsumerEndpoint( - busFactoryConfigurator, - busRegistrationContext, - RoutingSlipCleanUpConsumer.QueueName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - RemoveFileFromBucketActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - GenerateAudioWorkflowPathsActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - GeneratePictureWorkflowPathsActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - MarkTrackAsRemovingActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - DeleteTrackFromDbActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - MarkPlayListAsRemovingActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - DeletePlayListFromDbActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - PublishTrackProcessingEventsActivity.ExecuteEndpointName); - - ConfigureExecuteActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - PublishPlayListPictureProcessingEventActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - ResizePictureActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdatePlayListPictureActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdateTrackPictureActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - DownloadFileFromBucketActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - TranscodeAudioActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - TransferFilesToBucketActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UpdateTrackAudioActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - UploadFileToBucketActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - CopyFileInBucketActivity.ExecuteEndpointName); - - ConfigureActivityEndpoint( - busFactoryConfigurator, - busRegistrationContext, - ConsumeUploadIntentsActivity.ExecuteEndpointName); - } } } diff --git a/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.cs b/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.cs index 684a9f6..f31fcbe 100644 --- a/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.cs +++ b/backend/Musify.Infrastructure/MassTransit/DependencyInjection/MassTransitDependencyInjection.cs @@ -62,15 +62,37 @@ namespace Musify.Infrastructure.MassTransit outbox.DuplicateDetectionWindow = TimeSpan.FromMinutes(30); }); + options.SetKebabCaseEndpointNameFormatter(); + RegisterConsumersAndActivities(options); + options.AddConfigureEndpointsCallback((registrationContext, _, endpointConfigurator) => + { + UseStandardRetry(endpointConfigurator); + endpointConfigurator.UseEntityFrameworkOutbox(registrationContext); + }); + options.UsingRabbitMq((busRegistrationContext, busFactoryConfigurator) => - ConfigureRabbitMqWorkerEndpoints(busRegistrationContext, busFactoryConfigurator)); + { + ConfigureRabbitMqHost( + busFactoryConfigurator, + busRegistrationContext.GetRequiredService()); + + busFactoryConfigurator.ConfigureEndpoints(busRegistrationContext); + }); } ); return serviceDescriptors; } + static void UseStandardRetry(IReceiveEndpointConfigurator endpointConfigurator) => + endpointConfigurator.UseMessageRetry(retryConfigurator => + retryConfigurator.Exponential( + retryLimit: 5, + minInterval: TimeSpan.FromSeconds(1), + maxInterval: TimeSpan.FromSeconds(30), + intervalDelta: TimeSpan.FromSeconds(2))); + static void ConfigureRabbitMqHost( IRabbitMqBusFactoryConfigurator busFactoryConfigurator, MassTransitConfiguration massTransitConfiguration)