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}");