using Elsa.MassTransit.Messages; using Elsa.Workflows.Runtime.Contracts; using MassTransit; namespace Elsa.MassTransit.Consumers; /// /// A consumer of various dispatch message types to asynchronously execute workflows. /// public class DispatchWorkflowRequestConsumer : IConsumer, IConsumer, IConsumer, IConsumer { private readonly IWorkflowRuntime _workflowRuntime; /// /// Constructor. /// public DispatchWorkflowRequestConsumer(IWorkflowRuntime workflowRuntime) { _workflowRuntime = workflowRuntime; } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var options = new StartWorkflowRuntimeOptions(message.CorrelationId, message.Input, message.VersionOptions, InstanceId: message.InstanceId); await _workflowRuntime.StartWorkflowAsync(message.DefinitionId, options, context.CancellationToken); } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var options = new ResumeWorkflowRuntimeOptions( message.CorrelationId, message.InstanceId, message.BookmarkId, message.ActivityId, message.ActivityNodeId, message.ActivityInstanceId, message.ActivityHash, message.Input); await _workflowRuntime.ResumeWorkflowAsync(message.InstanceId, options, context.CancellationToken); } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var options = new TriggerWorkflowsRuntimeOptions(message.CorrelationId, message.WorkflowInstanceId, message.Input); await _workflowRuntime.TriggerWorkflowsAsync(message.ActivityTypeName, message.BookmarkPayload, options, context.CancellationToken); } /// public async Task Consume(ConsumeContext context) { var message = context.Message; var options = new TriggerWorkflowsRuntimeOptions(CorrelationId: message.CorrelationId, WorkflowInstanceId: message.WorkflowInstanceId, Input: message.Input); await _workflowRuntime.ResumeWorkflowsAsync(message.ActivityTypeName, message.BookmarkPayload, options, context.CancellationToken); } }