using Elsa.MassTransit.Messages; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; using Elsa.Workflows.Runtime.Parameters; using JetBrains.Annotations; using MassTransit; namespace Elsa.MassTransit.Consumers; /// /// A consumer of various dispatch message types to asynchronously execute workflows. /// [UsedImplicitly] public class DispatchWorkflowRequestConsumer : IConsumer, IConsumer, IConsumer, IConsumer { private readonly IWorkflowRuntime _workflowRuntime; /// /// Initializes a new instance of the class. /// public DispatchWorkflowRequestConsumer(IWorkflowRuntime workflowRuntime) { _workflowRuntime = workflowRuntime; } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var cancellationToken = context.CancellationToken; var options = new StartWorkflowRuntimeParams { CorrelationId = message.CorrelationId, Input = message.Input, Properties = message.Properties, VersionOptions = message.VersionOptions, TriggerActivityId = message.TriggerActivityId, InstanceId = message.InstanceId, CancellationTokens = cancellationToken }; await _workflowRuntime.TryStartWorkflowAsync(message.DefinitionId, options); } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var cancellationToken = context.CancellationToken; var options = new ResumeWorkflowRuntimeParams { CorrelationId = message.CorrelationId, BookmarkId = message.BookmarkId, ActivityId = message.ActivityId, ActivityNodeId = message.ActivityNodeId, ActivityInstanceId = message.ActivityInstanceId, ActivityHash = message.ActivityHash, Input = message.Input, Properties = message.Properties, CancellationTokens = cancellationToken }; await _workflowRuntime.ResumeWorkflowAsync(message.InstanceId, options); } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var cancellationToken = context.CancellationToken; var options = new TriggerWorkflowsOptions { CorrelationId = message.CorrelationId, WorkflowInstanceId = message.WorkflowInstanceId, ActivityInstanceId = message.ActivityInstanceId, Input = message.Input, Properties = message.Properties, CancellationTokens = cancellationToken }; await _workflowRuntime.TriggerWorkflowsAsync(message.ActivityTypeName, message.BookmarkPayload, options); } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var cancellationToken = context.CancellationToken; var options = new TriggerWorkflowsOptions { CorrelationId = message.CorrelationId, WorkflowInstanceId = message.WorkflowInstanceId, Input = message.Input, Properties = message.Properties, CancellationTokens = cancellationToken }; await _workflowRuntime.ResumeWorkflowsAsync(message.ActivityTypeName, message.BookmarkPayload, options); } }