Exemplo n.º 1
0
 public WorkflowLaunchpad(
     IWorkflowInstanceStore workflowInstanceStore,
     IWorkflowFactory workflowFactory,
     IBookmarkFinder bookmarkFinder,
     ITriggerFinder triggerFinder,
     IDistributedLockProvider distributedLockProvider,
     IWorkflowInstanceDispatcher workflowInstanceDispatcher,
     IWorkflowInstanceExecutor workflowInstanceExecutor,
     IWorkflowRunner workflowRunner,
     IWorkflowRegistry workflowRegistry,
     IGetsStartActivities getsStartActivities,
     ElsaOptions elsaOptions,
     ILogger <WorkflowLaunchpad> logger)
 {
     _workflowInstanceStore      = workflowInstanceStore;
     _bookmarkFinder             = bookmarkFinder;
     _triggerFinder              = triggerFinder;
     _distributedLockProvider    = distributedLockProvider;
     _workflowInstanceDispatcher = workflowInstanceDispatcher;
     _elsaOptions              = elsaOptions;
     _logger                   = logger;
     _getsStartActivities      = getsStartActivities;
     _workflowRegistry         = workflowRegistry;
     _workflowRunner           = workflowRunner;
     _workflowInstanceExecutor = workflowInstanceExecutor;
     _workflowFactory          = workflowFactory;
 }
        public static ElsaOptions AddStartupActivities(this ElsaOptions options)
        {
            options.Services.AddStartupTask <RunStartupWorkflows>();
            options.AddActivity <Activities.Startup>();

            return(options);
        }
Exemplo n.º 3
0
 public CreateSubscriptions(IServiceBusFactory serviceBusFactory, ElsaOptions elsaOptions, IContainerNameAccessor containerNameAccessor)
 {
     _serviceBusFactory     = serviceBusFactory;
     _containerNameAccessor = containerNameAccessor;
     _competingMessageTypes = elsaOptions.CompetingMessageTypes;
     _pubSubMessageTypes    = elsaOptions.PubSubMessageTypes;
 }
Exemplo n.º 4
0
 public QuartzWorkflowInstanceScheduler(QuartzSchedulerProvider schedulerProvider, IDistributedLockProvider distributedLockProvider, ElsaOptions elsaOptions, ILogger <QuartzWorkflowInstanceScheduler> logger)
 {
     _schedulerProvider       = schedulerProvider;
     _distributedLockProvider = distributedLockProvider;
     _elsaOptions             = elsaOptions;
     _logger = logger;
 }
        public async Task DispatchAsync(ExecuteWorkflowInstanceRequest request, CancellationToken cancellationToken = default)
        {
            var workflowInstance = await _workflowInstanceStore.FindByIdAsync(request.WorkflowInstanceId, cancellationToken);

            if (workflowInstance == null)
            {
                _logger.LogWarning("Cannot dispatch a workflow instance ID that does not exist");
                return;
            }

            var workflowBlueprint = await _workflowRegistry.GetAsync(workflowInstance.DefinitionId, workflowInstance.TenantId, VersionOptions.SpecificVersion(workflowInstance.Version), cancellationToken);

            if (workflowBlueprint == null)
            {
                _logger.LogWarning("Workflow instance {WorkflowInstanceId} references workflow blueprint {WorkflowDefinitionId} with version {Version}, but could not be found",
                                   workflowInstance.Id,
                                   workflowInstance.DefinitionId,
                                   workflowInstance.Version);

                return;
            }

            var channel = _workflowChannelOptions.GetChannelOrDefault(workflowBlueprint.Channel);
            var queue   = ElsaOptions.FormatChannelQueueName <ExecuteWorkflowInstanceRequest>(channel);

            EnqueueJob <WorkflowInstanceJob>(x => x.ExecuteAsync(request, CancellationToken.None), queue);
        }
Exemplo n.º 6
0
 public ServiceBusFactory(ElsaOptions elsaOptions, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
 {
     _elsaOptions      = elsaOptions;
     _loggerFactory    = loggerFactory;
     _serviceProvider  = serviceProvider;
     _handlerActivator = new DependencyInjectionHandlerActivator(serviceProvider);
 }
 public TypeBasedActivityProvider(ElsaOptions options,
                                  IDescribesActivityType describesActivityType,
                                  IActivityActivator activityActivator)
 {
     _describesActivityType = describesActivityType;
     _activityActivator     = activityActivator;
     _elsaOptions           = options;
 }
Exemplo n.º 8
0
 public LockingWorkflowRunner(
     IWorkflowRunner workflowRunner,
     IDistributedLockProvider distributedLockProvider,
     ElsaOptions elsaOptions)
 {
     _workflowRunner          = workflowRunner;
     _distributedLockProvider = distributedLockProvider;
     _elsaOptions             = elsaOptions;
 }
 public LockingWorkflowInstanceExecutor(
     IWorkflowInstanceExecutor workflowInstanceExecutor,
     IDistributedLockProvider distributedLockProvider,
     ElsaOptions elsaOptions,
     ILogger <LockingWorkflowInstanceExecutor> logger)
 {
     _workflowInstanceExecutor = workflowInstanceExecutor;
     _distributedLockProvider  = distributedLockProvider;
     _elsaOptions = elsaOptions;
     _logger      = logger;
 }
        public async Task DispatchAsync(ExecuteWorkflowDefinitionRequest request, CancellationToken cancellationToken = default)
        {
            var workflowBlueprint = await _workflowRegistry.GetAsync(request.WorkflowDefinitionId, request.TenantId, VersionOptions.Published, cancellationToken);

            if (workflowBlueprint == null)
            {
                _logger.LogWarning("No published version found for workflow blueprint {WorkflowDefinitionId}", request.WorkflowDefinitionId);
                return;
            }

            var channel = _workflowChannelOptions.GetChannelOrDefault(workflowBlueprint.Channel);
            var queue   = ElsaOptions.FormatChannelQueueName <ExecuteWorkflowDefinitionRequest>(channel);
            await _commandSender.SendAsync(request, queue, default, cancellationToken);
Exemplo n.º 11
0
 public PurgeSubscriptions(
     IServiceBusFactory serviceBusFactory,
     ElsaOptions elsaOptions,
     ILogger logger,
     IDistributedLockProvider distributedLockProvider,
     string connectionString)
 {
     _serviceBusFactory       = serviceBusFactory;
     _elsaOptions             = elsaOptions;
     _logger                  = logger;
     _distributedLockProvider = distributedLockProvider;
     _managementClient        = new ServiceBusAdministrationClient(connectionString);
 }
Exemplo n.º 12
0
 public ContinueRunningWorkflows(
     IWorkflowInstanceStore workflowInstanceStore,
     IWorkflowInstanceDispatcher workflowInstanceDispatcher,
     IDistributedLockProvider distributedLockProvider,
     ElsaOptions elsaOptions,
     ILogger <ContinueRunningWorkflows> logger)
 {
     _workflowInstanceStore      = workflowInstanceStore;
     _workflowInstanceDispatcher = workflowInstanceDispatcher;
     _distributedLockProvider    = distributedLockProvider;
     _elsaOptions = elsaOptions;
     _logger      = logger;
 }
Exemplo n.º 13
0
 public ExecuteWorkflowDefinition(
     IStartsWorkflow startsWorkflow,
     IWorkflowRegistry workflowRegistry,
     IWorkflowInstanceStore workflowInstanceStore,
     IDistributedLockProvider distributedLockProvider,
     ElsaOptions elsaOptions,
     ILogger <ExecuteWorkflowDefinition> logger)
 {
     _startsWorkflow          = startsWorkflow;
     _workflowRegistry        = workflowRegistry;
     _workflowInstanceStore   = workflowInstanceStore;
     _distributedLockProvider = distributedLockProvider;
     _elsaOptions             = elsaOptions;
     _logger = logger;
 }
Exemplo n.º 14
0
 public TriggerWorkflows(
     IWorkflowInstanceStore workflowInstanceStore,
     IBookmarkFinder bookmarkFinder,
     ITriggerFinder triggerFinder,
     IDistributedLockProvider distributedLockProvider,
     IMediator mediator,
     ElsaOptions elsaOptions,
     ILogger <TriggerWorkflows> logger)
 {
     _workflowInstanceStore   = workflowInstanceStore;
     _bookmarkFinder          = bookmarkFinder;
     _triggerFinder           = triggerFinder;
     _distributedLockProvider = distributedLockProvider;
     _mediator    = mediator;
     _elsaOptions = elsaOptions;
     _logger      = logger;
 }
Exemplo n.º 15
0
        public CreateSubscriptions(IServiceBusFactory serviceBusFactory, ElsaOptions elsaOptions, IContainerNameAccessor containerNameAccessor)
        {
            _serviceBusFactory     = serviceBusFactory;
            _containerNameAccessor = containerNameAccessor;
            _competingMessageTypes = elsaOptions.CompetingMessageTypes.ToList();
            _pubSubMessageTypes    = elsaOptions.PubSubMessageTypes;

            var workflowChannelOptions = elsaOptions.WorkflowChannelOptions;
            var workflowChannels       = workflowChannelOptions.Channels.ToList();

            // For each workflow channel, register a competing message type for workflow definition and workflow instance consumers.
            foreach (var workflowChannel in workflowChannels)
            {
                _competingMessageTypes.Add(new CompetingMessageType(typeof(ExecuteWorkflowDefinitionRequest), ElsaOptions.FormatChannelQueueName <ExecuteWorkflowDefinitionRequest>(workflowChannel)));
                _competingMessageTypes.Add(new CompetingMessageType(typeof(ExecuteWorkflowInstanceRequest), ElsaOptions.FormatChannelQueueName <ExecuteWorkflowInstanceRequest>(workflowChannel)));
            }
        }
Exemplo n.º 16
0
        public ElsaOptionsBuilder(IServiceCollection services)
        {
            ElsaOptions = new ElsaOptions();
            Services    = services;

            AddAutoMapper = () =>
            {
                // The profiles are added to AddWorkflowsCore so that they are not forgotten in case the AddAutoMapper function(option) is overridden.
                services.AddAutoMapper(Enumerable.Empty <Assembly>(), ServiceLifetime.Singleton);
            };

            services.AddSingleton <InMemNetwork>();
            services.AddSingleton <InMemorySubscriberStore>();
            services.AddSingleton <InMemDataStore>();
            services.AddMemoryCache();
            services.AddSingleton <ICacheSignal, CacheSignal>();

            DistributedLockingOptionsBuilder = new DistributedLockingOptionsBuilder(this);
        }
Exemplo n.º 17
0
        public static BackgroundJobServerOptions ConfigureForElsaDispatchers(this BackgroundJobServerOptions options, IServiceProvider serviceProvider)
        {
            var queues = options.Queues.ToHashSet();

            // Add default worker queues.
            queues.AddRange(new[] { QueueNames.CorrelatedWorkflows });

            // Add queue variations based on workflow channels, if any.
            var elsaOptions = serviceProvider.GetRequiredService <ElsaOptions>();
            var channels    = elsaOptions.WorkflowChannelOptions.Channels;

            foreach (var channel in channels)
            {
                queues.Add(ElsaOptions.FormatChannelQueueName <ExecuteWorkflowDefinitionRequest>(channel));
                queues.Add(ElsaOptions.FormatChannelQueueName <ExecuteWorkflowInstanceRequest>(channel));
            }

            options.Queues = queues.ToArray();

            return(options);
        }
Exemplo n.º 18
0
 public ActivityActivator(ElsaOptions options, IWorkflowStorageService workflowStorageService)
 {
     _elsaOptions            = options;
     _workflowStorageService = workflowStorageService;
 }
 public OptionsContainerNameAccessor(ElsaOptions elsaOptions) => _elsaOptions = elsaOptions;
 public ProgrammaticWorkflowProvider(ElsaOptions elsaOptions, IServiceProvider serviceProvider, Func <IWorkflowBuilder> workflowBuilder)
 {
     _workflows       = elsaOptions.WorkflowFactory.CreateServices(serviceProvider);
     _workflowBuilder = workflowBuilder;
 }
Exemplo n.º 21
0
 public WorkflowStorageService(IEnumerable <IWorkflowStorageProvider> providers, ElsaOptions elsaOptions, IServiceProvider serviceProvider)
 {
     _defaultStorageProvider = (IWorkflowStorageProvider?)ActivatorUtilities.GetServiceOrCreateInstance(serviceProvider, elsaOptions.DefaultWorkflowStorageProviderType) !;
     _providersLookup        = providers.ToDictionary(x => x.Name);
 }
Exemplo n.º 22
0
 public List(ElsaOptions elsaOptions) => _workflowChannels = elsaOptions.WorkflowChannelOptions.Channels.ToList();
Exemplo n.º 23
0
 public HangfireWorkflowDispatcher(IBackgroundJobClient jobClient, IWorkflowInstanceStore workflowInstanceStore, IWorkflowRegistry workflowRegistry, ElsaOptions elsaOptions, ILogger <HangfireWorkflowDispatcher> logger)
 {
     _jobClient              = jobClient;
     _workflowInstanceStore  = workflowInstanceStore;
     _workflowRegistry       = workflowRegistry;
     _workflowChannelOptions = elsaOptions.WorkflowChannelOptions;
     _logger = logger;
 }
Exemplo n.º 24
0
 public QueuingWorkflowDispatcher(ICommandSender commandSender, IWorkflowInstanceStore workflowInstanceStore, IWorkflowRegistry workflowRegistry, ElsaOptions elsaOptions, ILogger <QueuingWorkflowDispatcher> logger)
 {
     _commandSender          = commandSender;
     _workflowInstanceStore  = workflowInstanceStore;
     _workflowRegistry       = workflowRegistry;
     _workflowChannelOptions = elsaOptions.WorkflowChannelOptions;
     _logger = logger;
 }
Exemplo n.º 25
0
 public List(ElsaOptions elsaOptions, IEndpointContentSerializerSettingsProvider serializerSettingsProvider)
 {
     _serializerSettingsProvider = serializerSettingsProvider;
     _workflowChannels           = elsaOptions.WorkflowChannelOptions.Channels.ToList();
 }
Exemplo n.º 26
0
 public CreateSubscriptions(IServiceBusFactory serviceBusFactory, ElsaOptions elsaOptions)
 {
     _serviceBusFactory = serviceBusFactory;
     _messageTypes      = elsaOptions.MessageTypes;
 }
Exemplo n.º 27
0
 public ActivityActivator(ElsaOptions options)
 {
     _elsaOptions = options;
 }