using Elsa.Features.Abstractions; using Elsa.Features.Attributes; using Elsa.Features.Services; using Elsa.MassTransit.Features; using MassTransit; namespace Elsa.MassTransit.AzureServiceBus.Features; /// Configures MassTransit to use the Azure Service Bus transport. /// See https://masstransit.io/documentation/configuration/transports/azure-service-bus [DependsOn(typeof(MassTransitFeature))] public class AzureServiceBusFeature : FeatureBase { /// public AzureServiceBusFeature(IModule module) : base(module) { } /// An Azure Service Bus connection string. public string? ConnectionString { get; set; } /// /// A delegate that configures the Azure Service Bus transport options. /// public Action? ConfigureServiceBus { get; set; } /// public override void Configure() { Module.Configure(massTransitFeature => { massTransitFeature.BusConfigurator = configure => { configure.AddServiceBusMessageScheduler(); configure.UsingAzureServiceBus((context, serviceBus) => { if (ConnectionString != null) serviceBus.Host(ConnectionString); serviceBus.UseServiceBusMessageScheduler(); ConfigureServiceBus?.Invoke(serviceBus); serviceBus.ConfigureEndpoints(context, new KebabCaseEndpointNameFormatter("Elsa", false)); }); }; }); } }