From c12982dd88a323c88159ebd8817ae705f511c38a Mon Sep 17 00:00:00 2001 From: Thomas Yates Date: Sat, 15 Feb 2025 13:04:45 -0600 Subject: [PATCH] Added minor changes to MassTransitFeature to start using MassTransitOptions as the source for the prefetch count as the new source for this information is in the base MassTransitOptions. Created a new ConfigureTransportBus in both RabbitMQ and Azure Service Bus to support the context in the configuration action. Marked the old ConfigureServiceBus to persuade migration over to the contextual action. Currently, it will run the legacy action first and then the new contextual action second. The Elsa.Server.Web was also updated to use the new ConfigureTransportBus. --- src/apps/Elsa.Server.Web/Program.cs | 4 ++-- .../Features/AzureServiceBusFeature.cs | 13 +++++++++++++ .../Features/RabbitMqServiceBusFeature.cs | 13 +++++++++++++ .../Elsa.MassTransit/Features/MassTransitFeature.cs | 8 +++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/apps/Elsa.Server.Web/Program.cs b/src/apps/Elsa.Server.Web/Program.cs index 32fdbfc5c..4ad055918 100644 --- a/src/apps/Elsa.Server.Web/Program.cs +++ b/src/apps/Elsa.Server.Web/Program.cs @@ -481,7 +481,7 @@ services if (massTransitBroker == MassTransitBroker.AzureServiceBus) { - massTransit.UseAzureServiceBus(azureServiceBusConnectionString, serviceBusFeature => serviceBusFeature.ConfigureServiceBus = bus => + massTransit.UseAzureServiceBus(azureServiceBusConnectionString, serviceBusFeature => serviceBusFeature.ConfigureTransportBus = (context, bus) => { bus.PrefetchCount = 50; bus.LockDuration = TimeSpan.FromMinutes(5); @@ -493,7 +493,7 @@ services if (massTransitBroker == MassTransitBroker.RabbitMq) { - massTransit.UseRabbitMq(rabbitMqConnectionString, rabbit => rabbit.ConfigureServiceBus = bus => + massTransit.UseRabbitMq(rabbitMqConnectionString, rabbit => rabbit.ConfigureTransportBus = (context, bus) => { bus.PrefetchCount = 50; bus.Durable = true; diff --git a/src/modules/Elsa.MassTransit.AzureServiceBus/Features/AzureServiceBusFeature.cs b/src/modules/Elsa.MassTransit.AzureServiceBus/Features/AzureServiceBusFeature.cs index 581e603a0..7fd01c438 100644 --- a/src/modules/Elsa.MassTransit.AzureServiceBus/Features/AzureServiceBusFeature.cs +++ b/src/modules/Elsa.MassTransit.AzureServiceBus/Features/AzureServiceBusFeature.cs @@ -53,8 +53,20 @@ public class AzureServiceBusFeature : FeatureBase /// /// A delegate that configures the Azure Service Bus transport options. /// + /// This method is being marked as obsolete in favor of the ConfigureTransportBus which will provide additional access to the + [Obsolete("Use ConfigureTransportBus instead which provides a reference to IBusRegistrationContext.")] public Action? ConfigureServiceBus { get; set; } + /// + /// Configures the Azure Service Bus within MassTransit for additional transport level components or features. + /// This action provides access to the and . + /// + /// + /// Use this action to configure advanced settings and features for the Azure Service Bus, such as middleware + /// or additional endpoints. This action will run in addition to the Elsa required configuration. + /// + public Action ConfigureTransportBus { get; set; } + /// /// A delegate to configure . /// @@ -104,6 +116,7 @@ public class AzureServiceBusFeature : FeatureBase configurator.UseServiceBusMessageScheduler(); ConfigureServiceBus?.Invoke(configurator); + ConfigureTransportBus?.Invoke(context, configurator); var instanceNameProvider = context.GetRequiredService(); foreach (var consumer in temporaryConsumers) diff --git a/src/modules/Elsa.MassTransit.RabbitMq/Features/RabbitMqServiceBusFeature.cs b/src/modules/Elsa.MassTransit.RabbitMq/Features/RabbitMqServiceBusFeature.cs index 5b886a70e..bdcd01d8b 100644 --- a/src/modules/Elsa.MassTransit.RabbitMq/Features/RabbitMqServiceBusFeature.cs +++ b/src/modules/Elsa.MassTransit.RabbitMq/Features/RabbitMqServiceBusFeature.cs @@ -39,8 +39,20 @@ public class RabbitMqServiceBusFeature : FeatureBase /// /// Configures the RabbitMQ bus. /// + /// This method is being marked as obsolete in favor of the ConfigureTransportBus which will provide additional access to the + [Obsolete("Use ConfigureTransportBus instead which provides a reference to IBusRegistrationContext.")] public Action? ConfigureServiceBus { get; set; } + /// + /// Configures the RabbitMQ bus within MassTransit for additional transport level components or features. + /// This action provides access to the and . + /// + /// + /// Use this action to configure advanced settings and features for the RabbitMQ bus, such as middleware + /// or additional endpoints. This action will run in addition to the Elsa required configuration. + /// + public Action ConfigureTransportBus { get; set; } + /// public override void Configure() { @@ -69,6 +81,7 @@ public class RabbitMqServiceBusFeature : FeatureBase configurator.ConcurrentMessageLimit = options.ConcurrentMessageLimit; ConfigureServiceBus?.Invoke(configurator); + ConfigureTransportBus?.Invoke(context, configurator); foreach (var consumer in temporaryConsumers) { diff --git a/src/modules/Elsa.MassTransit/Features/MassTransitFeature.cs b/src/modules/Elsa.MassTransit/Features/MassTransitFeature.cs index 47f21ea67..66780b0e0 100644 --- a/src/modules/Elsa.MassTransit/Features/MassTransitFeature.cs +++ b/src/modules/Elsa.MassTransit/Features/MassTransitFeature.cs @@ -89,6 +89,7 @@ public class MassTransitFeature : FeatureBase /// /// Adds MassTransit to the service container and registers all collected assemblies for discovery of consumers. /// + /// The bus configurator used to configure the MassTransit Bus. private void AddMassTransit(Action busConfigurator) { // For each message type, create a concrete WorkflowMessageConsumer. @@ -119,6 +120,10 @@ public class MassTransitFeature : FeatureBase }); } + /// + /// Configures MassTransit to use the in-memory transport when no other transport has been configured. + /// + /// reference to the MassTransit bus to configure for and in-memory transport private void ConfigureInMemoryTransport(IBusRegistrationConfigurator configure) { var consumers = this.GetConsumers().ToList(); @@ -131,6 +136,7 @@ public class MassTransitFeature : FeatureBase configure.UsingInMemory((context, bus) => { var options = context.GetRequiredService>().Value; + var busOptions = context.GetRequiredService>().Value; foreach (var consumer in temporaryConsumers) { @@ -156,7 +162,7 @@ public class MassTransitFeature : FeatureBase return serializerOptions; }); - if (PrefetchCount != null) bus.PrefetchCount = PrefetchCount.Value; + if (busOptions.PrefetchCount.HasValue) bus.PrefetchCount = busOptions.PrefetchCount.Value; bus.ConfigureTenantMiddleware(context); });