using Elsa.Features.Abstractions; using Elsa.Features.Attributes; using Elsa.Features.Services; using Elsa.MassTransit.Features; using MassTransit; using Microsoft.Extensions.DependencyInjection; namespace Elsa.MassTransit.RabbitMq.Features; /// /// Configures MassTransit to use the RabbitMQ transport. /// [DependsOn(typeof(MassTransitFeature))] public class RabbitMqServiceBusFeature : FeatureBase { /// public RabbitMqServiceBusFeature(IModule module) : base(module) { } /// A RabbitMQ connection string. public string? ConnectionString { get; set; } /// Configures the RabbitMQ transport options. public Action? TransportOptions { get; set; } /// /// Configures the RabbitMQ bus. /// public Action? ConfigureServiceBus { get; set; } /// public override void Configure() { Module.Configure().BusConfigurator = configure => { configure.UsingRabbitMq((context, serviceBus) => { if (!string.IsNullOrEmpty(ConnectionString)) serviceBus.Host(ConnectionString); ConfigureServiceBus?.Invoke(serviceBus); serviceBus.ConfigureEndpoints(context, new KebabCaseEndpointNameFormatter("Elsa", false)); }); }; } /// public override void Apply() { if (TransportOptions != null) Services.Configure(TransportOptions); } }