From 5d9e886e7fdb8f98733a22b53566bcd4254562aa Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 11 Dec 2023 20:49:59 +0100 Subject: [PATCH] Enhance configuration options for MassTransit This commit enhances the configuration options for the MassTransit integration, providing additional settings for both Azure Service Bus and RabbitMq. It also refines the MassTransit workflow dispatcher configuration by allowing for custom dispatcher options. A default RabbitMq connection string has been added to the appsettings.json. --- .../Elsa.WorkflowServer.Web/Program.cs | 19 +++++++++++++++++-- .../Elsa.WorkflowServer.Web/appsettings.json | 2 +- .../MassTransitWorkflowDispatcherFeature.cs | 10 +++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/bundles/Elsa.WorkflowServer.Web/Program.cs b/src/bundles/Elsa.WorkflowServer.Web/Program.cs index 3d6397ea4..ec217fa0f 100644 --- a/src/bundles/Elsa.WorkflowServer.Web/Program.cs +++ b/src/bundles/Elsa.WorkflowServer.Web/Program.cs @@ -16,6 +16,7 @@ using Elsa.MongoDb.Extensions; using Elsa.MongoDb.Modules.Identity; using Elsa.MongoDb.Modules.Management; using Elsa.MongoDb.Modules.Runtime; +using MassTransit; using Microsoft.Data.Sqlite; using Microsoft.Extensions.Options; using Proto.Persistence.Sqlite; @@ -203,12 +204,26 @@ services { if (useMassTransitAzureServiceBus) { - massTransit.UseAzureServiceBus(azureServiceBusConnectionString, asb => asb.ConfigureServiceBus = bus => { bus.PrefetchCount = 4; }); + massTransit.UseAzureServiceBus(azureServiceBusConnectionString, serviceBusFeature => serviceBusFeature.ConfigureServiceBus = bus => + { + bus.PrefetchCount = 4; + bus.LockDuration = TimeSpan.FromMinutes(5); + bus.MaxConcurrentCalls = 32; + bus.MaxDeliveryCount = 8; + // etc. + }); } if (useMassTransitRabbitMq) { - massTransit.UseRabbitMq(rabbitMqConnectionString, rabbit => rabbit.ConfigureServiceBus = bus => { bus.PrefetchCount = 4; }); + massTransit.UseRabbitMq(rabbitMqConnectionString, rabbit => rabbit.ConfigureServiceBus = bus => + { + bus.PrefetchCount = 4; + bus.Durable = true; + bus.AutoDelete = false; + bus.ConcurrentMessageLimit = 32; + // etc. + }); } }); } diff --git a/src/bundles/Elsa.WorkflowServer.Web/appsettings.json b/src/bundles/Elsa.WorkflowServer.Web/appsettings.json index ce437e841..9859fc4f8 100644 --- a/src/bundles/Elsa.WorkflowServer.Web/appsettings.json +++ b/src/bundles/Elsa.WorkflowServer.Web/appsettings.json @@ -17,7 +17,7 @@ "Sqlite": "Data Source=App_Data/elsa.sqlite.db;Cache=Shared;", "MongoDb": "mongodb://localhost:27017/elsa-workflows", "AzureServiceBus": "", - "RabbitMq": "" + "RabbitMq": "amqp://guest:guest@localhost:5672/elsa" }, "Smtp": { "Host": "localhost", diff --git a/src/modules/Elsa.MassTransit/Features/MassTransitWorkflowDispatcherFeature.cs b/src/modules/Elsa.MassTransit/Features/MassTransitWorkflowDispatcherFeature.cs index d09d9d62b..786c438d6 100644 --- a/src/modules/Elsa.MassTransit/Features/MassTransitWorkflowDispatcherFeature.cs +++ b/src/modules/Elsa.MassTransit/Features/MassTransitWorkflowDispatcherFeature.cs @@ -25,6 +25,11 @@ public class MassTransitWorkflowDispatcherFeature : FeatureBase public MassTransitWorkflowDispatcherFeature(IModule module) : base(module) { } + + /// + /// Configures the MassTransit workflow dispatcher. + /// + public Action? ConfigureDispatcherOptions { get; set; } /// public override void Configure() @@ -36,7 +41,10 @@ public class MassTransitWorkflowDispatcherFeature : FeatureBase /// public override void Apply() { - Services.AddOptions(); + var options = Services.AddOptions(); + + if (ConfigureDispatcherOptions != null) + options.Configure(ConfigureDispatcherOptions); var queueName = KebabCaseEndpointNameFormatter.Instance.Consumer(); var queueAddress = new Uri($"queue:elsa-{queueName}");